我的页面中包含一些表格:
<table width='100%' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>20</b></td>
</tr>
<tr><
td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
</table>
<table width='361' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><a href='XXX'><b>XXX</b></a></td>
</tr>
<tr>
<td align='right'>PHONE :</td>
<td><b>518878943</b></td>
</tr>
</table>
我想从这个页面得到第二张表中的电话号码:
<td align='right'>PHONE :</td>
<td><b>518878943</b></td>
然而,我的代码:
page_src="""<table width='100%' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>20</b></td>
</tr>
<tr><
td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
</table>
<table width='361' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><a href='XXX'><b>XXX</b></a></td>
</tr>
<tr>
<td align='right'>PHONE :</td>
<td><b>518878943</b></td>
</tr>
</table>
"""
soup = BeautifulSoup(page_src, 'html.parser')
divs = soup.findAll("table", {"class": "an"})
for div in divs:
row = ''
rows = [row in div.findAll('tbody').findAll('tr')]
给我这样的错误信息:
Traceback (most recent call last):
File "test.py", line 198, in <module>
rows = [row in div.findAll('tbody').findAll('tr')]
AttributeError: 'ResultSet' object has no attribute 'findAll'
如何解决此问题并从页面获取电话号码?感谢
修改
部分解决了。部分原因是因为我认为我的解决方案很丑陋,但有效。也许有人会提出更漂亮的解决方案?
tds = []
soup = BeautifulSoup(page_src, 'html.parser')
divs = soup.findAll("table", {"class": "an"})
for div in divs:
rows = div.findAll('tr')
for row in rows :
tds.append(row.findAll('td'))
phone = str(tds[12][1])
phone = phone.replace("<td><b>", "").replace("</b></td>", "").strip()
print phone
答案 0 :(得分:11)
找到包含td
的{{1}}元素,然后获取following sibling element。一行:
PHONE :
答案 1 :(得分:3)
您的代码存在一些问题。
divs = soup.findAll("table", {"class": "an"})
for div in divs:
row = ''
rows = [row in div.findAll('tbody').findAll('tr')]
第一个问题是没有tbody
代码,因此div.findAll('tbody')
不会返回任何内容。
第二个问题是div.findAll('tbody')
会返回一个数组,而不是一个标记,因此您无法在其上调用findAll('tr')
。
以下是您希望获得表格中所有tr
代码的内容:
divs = soup.findAll("table", {"class": "an"})
for div in divs:
row = ''
rows = div.findAll('tr')
然后,您可以浏览所有tr
代码并调用.text
以获取该行内的文字,而其中包含“PHONE”的代码就是您想要的内容。
soup = BeautifulSoup(page_src, 'html.parser')
divs = soup.findAll("table", {"class": "an"})
for div in divs:
row = ''
rows = div.findAll('tr')
for row in rows:
if(row.text.find("PHONE") > -1):
print(row.text)
产生
PHONE :
518878943