python - 如何使用 Beautiful soup 在 <span> 标签中搜索特定的 "class=id"类型属性?

标签 python parsing beautifulsoup

我正在尝试使用 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/

相关文章:

java - 使用Jsoup时如何获取元素的LineNumber?

javascript - 使用正则表达式从 javascript 中提取值

python - 获取 Youtube 搜索结果的链接

写入文件时将 Python unicode 转换为 ASCII

python - 计算 DNA 序列中的三联体

python - 对 numpy 数组的不均匀分割部分应用运算

python - 504 : Gateway Timeout with urllib2

python - Amazon Linux 实例使用 subprocess.run 在 Python 脚本中死机

java - 从java中的xml中提取文本

python - BS HTML 解析 - & 在打印 URL 字符串时被忽略