#python #html #web-scraping
#python #HTML #веб-очистка
Вопрос:
существует фрагмент HTML-кода
<tr bgcolor="#cceeff" style="page-break-inside:avoid ; font-family:Def.-Times; font-size:8pt">
<td colspan="3" valign="top"> <p style=" margin-top:0pt ; margin-bottom:0pt; margin-left:2.00em; text-indent:-1.00em; font-size:8pt; font-family:ARIAL"><b>{99}</b> <b></b>Receivables becoming Defaulted Receivables during period</p></td>
<td align="right" valign="bottom"><font style="font-family:ARIAL; ">1,310,326.05</font></td>
<td nowrap="nowrap" valign="bottom"><font style="font-family:ARIAL; "> </font></td>
<td valign="bottom"> </td>
<td valign="bottom"></td>
<td valign="bottom"></td>
Как я могу извлечь такие данные, как
{4}Defaulted Receivables', '{4}', '1,310,326.05']
У меня был код, который мне дал человек
def get_row(soup, n):
return [td.get_text(strip=True) for td in soup.select('tr:contains("{' str(n) '}") td') if td.get_text(strip=True)]
но, во-первых, я не понимаю, как найти «строку» в HTML-коде.
во-вторых, tr:contains("{' str(n) '}") td
что делает этот код??
извините, я новичок в очистке и HTML
Ответ №1:
Я улучшил / исправил код, теперь он будет печатать список списков текстов записей для каждой строки.
Коду требуется, чтобы beautiful soup и lxml были установлены один раз : python -m pip install lxml bs4
.
# Needs: python -m pip install lxml bs4
import lxml
from bs4 import BeautifulSoup
soup = BeautifulSoup("""
<tr bgcolor="#cceeff" style="page-break-inside:avoid ; font-family:Def.-Times; font-size:8pt">
<td colspan="3" valign="top"> <p style=" margin-top:0pt ; margin-bottom:0pt; margin-left:2.00em; text-indent:-1.00em; font-size:8pt; font-family:ARIAL"><b>{99}</b> <b></b>Receivables becoming Defaulted Receivables during period</p></td>
<td align="right" valign="bottom"><font style="font-family:ARIAL; ">1,310,326.05</font></td>
<td nowrap="nowrap" valign="bottom"><font style="font-family:ARIAL; "> </font></td>
<td valign="bottom"> </td>
<td valign="bottom"></td>
<td valign="bottom"></td>
</tr>
""", 'lxml')
print([[
td.get_text(strip=True) for td in tr.select('td') if td.get_text(strip=True)
] for tr in soup.select('tr')])
Код печатает:
[['{99}Receivables becoming Defaulted Receivables during period', '1,310,326.05']]