Python findall 使用正则表达式抓取 HTML 标签内的数据

标签 python html

大家好/Python 爱好者/RegEx 爱好者,

我正在做实验练习,学习 Python RE 包。 我有这个数据。我只想抓取 HTML 标签之间的数据。 我尝试了这个“[^()]\d+”,即排除所有 HTML 标签 TBODY 或 TD 或/TD 等

它错过了第一个数据 1850

<TBODY><TR><TD>1850</TD><TD>John</TD><TD>-0.339</TD><TD>-0.425</TD></TR></TBODY>

regex101 link

我正在努力

re.findall("[^(<\/?\w+>)]\d+", html_line)

试试这个 "(<\/?\w+>)"分组让我获得所有 HTML 标签,我只是排除所有 HTML 标签, 就在对面,所以,我尝试了[^(<\/?\w+>)]

提前致谢。 N。 PS:部分问题是,我不应该使用 BeautifulSoup

最佳答案

您通常应该使用诸如 Beautiful Soup 之类的包,它旨在解析和处理 HTML/XML 内容。对 HTML 使用纯正则表达式并不理想,但您可以尝试以下操作:

inp = "<TBODY><TR><TD>1850</TD><TD>-0.373</TD><TD>-0.339</TD><TD>-0.425</TD></TR></TBODY>"
matches = re.findall(r'<([^>]+)>(-?\d+(?:\.\d+)?)</\1>', inp)
print([i[1] for i in matches])

打印:

['1850', '-0.373', '-0.339', '-0.425']

以下是所使用的正则表达式的说明:

<([^>]+)>          match an opening HTML tag, and capture the tag label in \1
(-?\d+(?:\.\d+)?)  then match and capture a positive/negative number, with optional decimal
</\1>              match a closing HTML tag idential to what opened

关于Python findall 使用正则表达式抓取 HTML 标签内的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59744971/

相关文章:

javascript - Firebase 数据未在网络中显示

python - 将 CSV 导入 BigQuery 中的表时无法添加字段

python - 如何使用 Wikipedia API 获取图像标题

html - three.js 阴影截止

css - 如何用阴影、高光效果和非平面颜色复制这个底部?

jquery - bool 属性的语法是什么,例如一个选中的复选框,在 HTML 中?

javascript - 道场可移动: Limit Moving to horizontal

python - 如何从可以在 VBA 中调用的简单 python 代码创建 dll

python - &nbsp 文本未被 lxml 处理

python - 在 App Engine 应用程序初始化时执行代码