Python BeautifulSoup включает пустые строки - PullRequest
1 голос
/ 17 июня 2020

Я очищаю веб-сайт с помощью python3 и BeautifullSoup и экспортирую в csv. Проблема, с которой я столкнулся, заключается в том, что некоторые элементы пусты, и когда я распечатываю страницу, эти элементы теперь отсутствуют. Я бы предпочел, чтобы он все еще печатался, даже если он пустой. Из-за этого в моем CSV-файле строки не совпадают со столбцами, когда элемент пустой. Я уверен, что если я смогу заставить печать работать должным образом, я смогу исправить проблему в моем CSV-файле.

Пример html код

<tr><td>item1</td><td>server11</td><td>env</td><td>uptime</td></tr>
<tr><td>item2</td><td></td><td>env</td><td>uptime</td></tr>

Как видите, у item2 есть тег td который пуст

soup = BeautifulSoup(content, 'lxml')
for s in soup.findAll('tr'):
    print(s.get_text(","))

Результат:

item1,server11,env,uptime
item2,env,uptime

Однако я бы хотел, чтобы результат выглядел так

item1,server11,env,uptime
item2,,env,uptime

1 Ответ

1 голос
/ 17 июня 2020

Вы можете использовать str.join для объединения текстов из всех <td>.

Например:

from bs4 import BeautifulSoup

txt = '''
<tr><td>item1</td><td>server11</td><td>env</td><td>uptime</td></tr>
<tr><td>item2</td><td></td><td>env</td><td>uptime</td></tr>'''

soup = BeautifulSoup(txt, 'html.parser')

for tr in soup.select('tr'):
    print(','.join(td.get_text(strip=True) for td in tr.select('td')))

Печать:

item1,server11,env,uptime
item2,,env,uptime
...