如何在标签中搜索<span>具有美丽汤的特定"class=id"类型属性?



我正在尝试用BeautifulSoup刮取一个页面,该页面的通用格式如下:

<span class="ID1"> TEXT </span>
<span class="ID2"> TEXT2 </span>

这些都存储在<div>中,所以我的通用代码模板如下所示:

for tag in soup.find_all('div'):
print tag.find('span')

这会调出div中的所有<span>标签,但我不知道如何在<span>s内部进行搜索。我尝试过tag.find('class').find('ID')之类的东西,但没有成功。

我可以手动找到我想要的东西,方法是获取对象的字符串表示,然后测试它是否具有我想要的ID,但这似乎是一种创可贴的方法。我确信有些东西是我没有看到的。

注意:我还尝试将ID的正则表达式传递给find函数ala:

for tag in soup.find_all('div'):
print tag.find(re.compile('id2'))

不幸的是,仍然没有运气。

那么,我该如何搜索特定的类值呢?

*编辑[已解决]


我发现了如何通过BeautifulSoup内置的find函数来实现这一点,而无需手动检查其字典结构。

要使用find函数在html标记中挑选特定的class=value,请输入要查找的常规标记名称作为第一个参数(在我的情况下,它是"标记的一部分)。作为第二个参数,传入一个包含要查找的特定'class' : 'value'的字典。

例如,如果我想要抓取的HTML看起来像这样:

<div>
<span class="ID1"> TEXT </span>
<other HTML junk> 
<span class="ID2"> TEXT2 </span>
</div>

我可以使用下面这样的语句。

for tag_elm in soup.find_all('div'):
print tag_elm.find('span', {'class' : 'ID2'})

塔达!

这应该有效:

for tag in soup.findAll('span'):
if tag.has_key('class'):
if tag['class'] == 'ID2':
# do stuff

测试此代码:

from BeautifulSoup import BeautifulSoup
text = '''
<span class="ID1"> TEXT </span>
<span class="ID2"> TEXT2 </span>
'''
soup = BeautifulSoup(text)
for tag in soup.findAll('span'):
if tag.has_key('class'):
if tag['class'] == 'ID2':
print tag.string
break

给出以下输出:

TEXT2

相关内容

最新更新