我正在尝试使用BeautifulSoup在我们的电话GW中刮取呼叫代码页面。使用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列中展开,然后跳到
答案 0 :(得分:1)
将解析器更改为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>