需要 Python 中正则表达式模式的帮助 – 解析复杂的 HTML 结构

问题描述 投票:0回答:2

我正在尝试使用 Python 的 re 模块解析复杂的 HTML 结构,但我的正则表达式模式遇到了障碍。这就是我正在尝试做的事情:

我有包含嵌套元素的 HTML 文本,我想提取最里面标签的内容。但是,我似乎无法正确使用正则表达式模式。这是我正在使用的代码:

import re

html_text = """
<div>
    <div>
        <div>
            Innermost Content 1
        </div>
    </div>
    <div>
        Innermost Content 2
    </div>
</div>
"""

pattern = r'<div>(.*?)<\/div>'
result = re.findall(pattern, html_text, re.DOTALL)

print(result)

我期望这段代码返回最里面元素的内容,如下所示:

['Innermost Content 1', 'Innermost Content 2']

但它没有按预期工作。我的正则表达式模式做错了什么,如何修复它以达到预期的结果?任何帮助将不胜感激!

python regex parsing web-scraping html-parsing
2个回答
0
投票

你可以使用这个:

[re.sub(r'<div>|<\/div>|\s+', '', item) for item in result]

你也可以使用合适的 HTML 解析库,比如 BeautifulSoup 来代替:

# Parse the HTML with BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')

# Find all <div> elements and extract their text
div_elements = soup.find_all('div')
for div in div_elements:
    print(div.get_text())

0
投票

尝试使用更改后的模式和额外的行来删除此修改后的代码

import re

html_text = """
<div>
    <div>
        <div>
            Innermost Content 1
        </div>
    </div>
    <div>
        Innermost Content 2
    </div>
</div>
"""

pattern = r'<div>([^<]*?)<\/div>'
result = re.findall(pattern, html_text, re.DOTALL)

result = [content.strip() for content in result if content.strip()]

print(result)
© www.soinside.com 2019 - 2024. All rights reserved.