1

我正在尝试使用 BeautifulSoup 抓取具有以下一般格式的页面:

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

这些都存储在 a 中<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函数在 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'})

多田!

4

1 回答 1

3

这应该有效:

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

给出以下输出:

文本2
于 2012-12-18T23:17:54.403 回答