需要使用 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 查找文本的主要内容,如果未能解决你的问题,请参考以下文章
CUDA、Boost 和 Cmake “字符串子命令 REGEX,模式 MATCHALL 需要至少 5 个参数来命令。”