Очистка конкретных данных от edgar

#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']]