在Python中使用BeautifulSoup查找html标记

时间:2013-09-14 10:34:43

标签: python html django beautifulsoup

我想在html代码中找到一个特定的标签,如果有2个标签那么我怎样才能获得第二个标签的内容而不是第一个标签,其中的汤.find(id ='contact1')在这里是示例html代码

<table align="center"><th id="contact">STUDENT ID</th><th id="contact">NAME</th><th id="contact">   Phone </th><th id="contact"> NO.</th>
<p align="center" style="display:compact; font-size:18px; font-family:Arial, Helvetica, sans-serif; color:#CC3300">
</p><tr>
<td id="contact1">
2011XXA4438F </td> <td id="contact1"> SAM SRINIVAS KRISHNAGOPAL</td> <td id="contact1"> 9894398690 </td> <td id="contact1"> </td>
</tr>
</table>

我想要做的是将'2011XXA4438F'作为字符串提取,我该怎么做?

3 个答案:

答案 0 :(得分:4)

<td id="contact1">第一个标记,其ID为"contact1"。要获得它,那么soup.find就是您所需要的:

>>> print soup.find(id='contact1').text.strip()
2011XXA4438F

如果您正在寻找其他代码,那么您需要使用find_all

>>> print soup.find_all(id='contact1')
[<td id="contact1">
2011XXA4438F </td>, <td id="contact1"> SAM SRINIVAS KRISHNAGOPAL</td>, <td id="contact1"> 9894398690 </td>, <td id="contact1"> </td>]

答案 1 :(得分:1)

我很确定.find只为您提供与查询匹配的第一个元素。请尝试使用.findAll。

在此处查看文档 - http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html

编辑:误读你的帖子。只是为了完全理解。你想总是找到第二次出现“id ='contact1'”吗?

可能有更优雅的东西,但你可以做类似

的事情
v = soup.find_all(id='contact1')
length = 0
for x in v:
    length += 1
    if length = 2: #set number according to which occurrence you want. 
        #here is the second occurrence of id='contact1'. 

以上内容完全未经过测试,只是直接写在这里。我刚刚开始使用python,有些可能是一种更有效的方法:-)

答案 2 :(得分:0)

您也可以这样操作:
target = soup.find(“ table”,{“ id”:“ contact1”})