需要使用 RegEx 和 BeautifulSoup 查找文本

Posted

技术标签:

【中文标题】需要使用 RegEx 和 BeautifulSoup 查找文本【英文标题】:Need to find text with RegEx and BeautifulSoup 【发布时间】:2013-05-01 12:35:02 【问题描述】:

我正在尝试解析网站以提取一些存储在正文中的数据,例如:

<body>
    <b>INFORMATION</b>
    Hookups: None
    Group Sites: No
    Station: No

    <b>Details</b>
    Ramp: Yes
</body>

我想使用 BeautifulSoup4 和 RegEx 提取 Hookups 和 Group Sites 等的值,但我对 bs4 和 RegEx 都是新手。我尝试了以下方法来获取连接值:

soup = BeautifulSoup(open('doc.html'))
hookups = soup.find_all(re.compile("Hookups:(.*)Group"))

但搜索结果为空。

【问题讨论】:

【参考方案1】:

BeautifulSoup 的find_all 仅适用于标签。假设 HTML 如此简单,您实际上可以只使用纯正则表达式来获得所需的内容。否则,您可以使用find_all,然后获取.text 节点。

re.findall("Hookups: (.*)", open('doc.html').read())

从 BeautifulSoup 4.2 开始,您还可以使用 text 属性按标签内容搜索

soup.find_all(text=re.compile("Hookups:(.*)Group"));

编辑:从 BeautifulSoup 4.4 开始,text 参数被命名为 string

【讨论】:

这个答案不正确,可以使用soup.find_all(text=re.compile(...)) @sberder 这个答案已经有好几年了,所以 BeautifulSoup 从那时起可能已经更新,但我检查了their docs,即使使用正则表达式,这 still 仅适用于标签而不是它们的内容.我认为这个答案仍然是正确的,不值得一票否决,但请随时详细说明,或者您可以提供另一个答案。 还是不正确,你可以use regexp to match tag content: """和name和关键字参数一样,你可以传入一个字符串、一个正则表达式、一个列表、一个函数,或者值True。 """ 你写答案时可能是真的,但现在可能。 @sberder 好电话;感谢您指出了这一点。我会更新答案 @ExplosionPills 值得一提的是,text 参数现在称为string(从 BeautifulSoup 4.4.0 开始)。尽管上述注释中的语法仍然有效(感谢@sberder),但更新后的语法现在将是soup.find_all(string=re.compile(...))。链接也发生了变化:现在是crummy.com/software/BeautifulSoup/bs4/doc/#the-string-argument

以上是关于需要使用 RegEx 和 BeautifulSoup 查找文本的主要内容,如果未能解决你的问题,请参考以下文章

在 AIX 服务器上使用 regex 和 pscp

RegEx 删除密钥和证书页眉和页脚 [重复]

CUDA、Boost 和 Cmake “字符串子命令 REGEX,模式 MATCHALL 需要至少 5 个参数来命令。”

如何使用 Regex.Replace 从字符串中删除数字?

我需要使用 regex (Address) C# 替换一些单词

使用 Linq 和 Regex 比较 2 个字符串数组以进行部分匹配