BeautifulSoup找不到包含特定文本的HTML标记

时间:2017-07-06 10:41:00

标签: python regex beautifulsoup

我只想使用正则表达式来检索所有包含" //"的元素。在我的HTML字符串中,我按照这个问题的答案:Using BeautifulSoup to find a HTML tag that contains certain text

然后我编写了类似的代码:

from BeautifulSoup import BeautifulSoup
import re

html_text = \
"""
<html>
    <!--&lt;![endif]-->
    <head>
        <link rel="stylesheet" href="//abc.com/xyz" />
        <meta rel="stylesheet" href="//foo.com/bar" />
    </head>
</html>
"""

soup = BeautifulSoup(html_text)

for elem in soup(text=re.compile(r'//')):
    print elem

我希望我的结果如下:

//abc.com/xyz
//foo.com/bar

但我一无所获。我不知道为什么他们的测试用例可行,但是我的,是否有任何错误或我错过了我的脚本?

1 个答案:

答案 0 :(得分:2)

设置了错误的属性

soup = BeautifulSoup(html_text, 'lxml')

for elem in soup(href=re.compile(r'//')):
    print elem.get('href')

在评论中提取问题的方法,你需要在找到哪个标签包含数据后解析数据。

def has_requires_chars(tag):
    value_list = []
    attrs_value = tag.attrs.values()
    for avalue in attrs_value:
        if type(avalue) is list:
            value_list = value_list + avalue
        else:
            value_list.append(avalue)
    for value in value_list:
        if "//" in value:
            return True
    return False

soup = BeautifulSoup(html_text, 'lxml')
for elem in soup.find_all(has_requires_chars):
    print elem