python - .find 不返回完整对象

标签 python beautifulsoup

我正在尝试使用 BeautifulSoup 来抓取我们手机 GW 中的一页调用代码。使用 soup.find 和 soup.find_all 不会返回我正在查找的完整元素。这是我使用 BeautifulSoup 的第一个脚本,所以我可能会忽略一些东西。

这是我试图提取的 html 中的 block

<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'})

我本来希望得到整个 block ,但我得到的是:

<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 列,然后跳至

最佳答案

将解析器更改为 lxml。如果 HTML 的格式不正确,不同的解析器会以不同的方式对待它。

Differences between parsers.

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>

关于python - .find 不返回完整对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53951227/

相关文章:

python - Pandas 多索引: print all of first index if in second index

android - 与 Java 相比,使用 kivy 编码时 .apk 的大小

python - 从搜索结果页面 BeautifulSoup 中抓取所有 URL

python - 使用 BeautifulSoup 进行网页抓取 - 无法提取表行

python - 如何使用 beautifulsoup4 选择除某个 html 元素之外的所有内容?

python - BeautifulSoup 只返回 head 标签内的内容

python - 如何在 pytest hooks 中捕获打印语句

python - 如何返回与字典中最小值对应的键列表

python - 将请求文本响应加载到 Pandas 数据框中

Python:如何通过 BeautifulSoup 通过其中的字符串获取表格行?