我正在尝试使用 BeautifulSoup 抓取页面,其一般格式如下:
<span class="ID1"> TEXT </span>
<span class="ID2"> TEXT2 </span>
这些都存储在 <div>
中,所以我的通用代码模板如下所示:
for tag in soup.find_all('div'):
print tag.find('span')
这会拉起所有 <span>
div
中的标签,但我不知道如何在 <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
函数来挑选一个特定的 class=value
在 html 标签内,传入您想要查找的通用标签名称作为第一个参数(在我的例子中,它是 '' 标签的一部分)。作为第二个参数,传入具有特定 '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
关于python - 如何使用 Beautiful soup 在 <span> 标签中搜索特定的 "class=id"类型属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943087/