.find не возвращает полный объект - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь использовать BeautifulSoup, чтобы очистить страницу кодов вызовов в наших телефонах.Использование soup.find и soup.find_all не возвращает полный элемент, который я ищу.Это мой первый скрипт, использующий BeautifulSoup, поэтому я могу что-то пропустить.

Это блок в html, который я пытаюсь получить

<tr class='styReportFooter'>
  <td align='center'><span class='styPageTitle'>Totals</span></td>
  <td align='center' id='column1' style='display:none;'><span 
class='styPageTitle'>1862</span></th>
  <td align='center' id='column2' style='display:none;'><span 
class='styPageTitle'>153</span></th>
  <td align='center' id='column3' style='display:none;'><span 
class='styPageTitle'>12</span></th>
</tr>

и мой запрос

total = soup.find('tr', attrs={'class': 'styReportFooter'})

Я ожидал получить весь блок, вместо этого яполучите это:

<tr class="styReportFooter">
<td align="center"><span class="styPageTitle">Totals</span></td>
<td align="center" id="column1" style="display:none;"><span 
class="styPageTitle">1862</span></td></tr>

Он перехватывает столбец 1, затем переходит к

1 Ответ

0 голосов
/ 28 декабря 2018

Измените свой парсер на lxml.Если HTML не правильно сформирован, разные парсеры будут обрабатывать его по-разному.

Различия между парсерами.

from bs4 import BeautifulSoup
html="""
<tr class='styReportFooter'>
  <td align='center'><span class='styPageTitle'>Totals</span></td>
  <td align='center' id='column1' style='display:none;'><span
class='styPageTitle'>1862</span></th>
  <td align='center' id='column2' style='display:none;'><span
class='styPageTitle'>153</span></th>
  <td align='center' id='column3' style='display:none;'><span
class='styPageTitle'>12</span></th>
</tr>
"""
soup=BeautifulSoup(html,'lxml')
total = soup.find('tr', attrs={'class': 'styReportFooter'})
print(total)

Вывод:

<tr class="styReportFooter">
<td align="center"><span class="styPageTitle">Totals</span></td>
<td align="center" id="column1" style="display:none;"><span class="styPageTitle">1862</span>
</td><td align="center" id="column2" style="display:none;"><span class="styPageTitle">153</span>
</td><td align="center" id="column3" style="display:none;"><span class="styPageTitle">12</span>
</td></tr>

Если бы я использовал soup=BeautifulSoup(html,'html.parser') выше, я бы получил

<tr class="styReportFooter">
<td align="center"><span class="styPageTitle">Totals</span></td>
<td align="center" id="column1" style="display:none;"><span class="styPageTitle">1862</span></td></tr>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...