BeautifulSoup — удалите все строки, содержащие атрибут «colspan» Python

Мне нужно удалить все строки, содержащие colspan<td black = "" colspan='3D"8"'>zzz</td>, прежде чем он достигнет [i.text.strip .

HTML:

<td black = "" colspan='3D"8"'>zzz</td>
<td>1</td>
<td>2</td>
<td>3</td>

Питон:

soup = bs.BeautifulSoup(text, 'lxml')

table = soup.find('table')
table_rows = table.find_all('tr')

for tr in table_rows:
    td = tr.find_all('td')
    print(td)
row = [i.text.strip('\\r\\n').strip('=\\r\\nspan>').strip('=\\r\\n').strip('<=\\r\\n/').strip('\\r\\n') for i in td]

Обновить (исправить)

    for tr in table_rows:
    row = [i.text.strip('\\r\\n').strip('=\\r\\nspan>').strip('=\\r\\n').strip('<=\\r\\n/').strip('\\r\\n') for i in tr.find_all('td') if not i.get('colspan')]
    print(row)

Я также удалил td = tr.find_all('td') и добавил это в понимание списка. Всем большое спасибо за помощь :)

Почему вы хотите удалить его?

baduker 10.12.2020 20:14

просто поставить if not i.get('colspan') в списке понимания?

Chase 10.12.2020 20:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
317
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Понимание списков Python поддерживает фильтр на лету, все, что вам нужно сделать, это поместить if not i.get('colspan') в понимание списка, и он отфильтрует любой элемент с атрибутом colspan перед оценкой вашего expr

[expr for i in td if not i.get('colspan')]

Это должно ответить на ваш вопрос, однако меня беспокоит то, как вы строите td, вы, кажется, перезаписываете td в своем цикле for tr in table_rows каждую итерацию. Оставляем только окончательный результат .find_all in.

Чтобы полностью переопределить td для всех будущих вычислений и отфильтровать все элементы с атрибутом colspan-

td = list(filter(lambda x: not x.get('colspan'), td))

Я хочу удалить его перед редактированием оставшихся <td>. Некоторые файлы выходят из строя с colspan, и это портит мои данные, тем более что они мне не нужны.

Chambo 10.12.2020 21:56

@Чамбо td = list(filter(lambda x: not x.get('colspan'), td))

Chase 10.12.2020 22:01

Другие вопросы по теме