要高效提取HTML中特定<div>
标签下的<li>
文本内容,可以使用正则表达式结合适当的模式匹配。以下是一个示例Python代码,展示如何使用正则表达式来实现这一目标:
import re
# 示例HTML内容
html_content = """
<div class="target-div">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</div>
<div class="other-div">
<ul>
<li>Other Item 1</li>
<li>Other Item 2</li>
</ul>
</div>
"""
# 正则表达式模式
pattern = r'<div class="target-div">.*?<ul>(.*?)</ul>.*?</div>'
# 使用re.DOTALL标志使.匹配包括换行符在内的所有字符
match = re.search(pattern, html_content, re.DOTALL)
if match:
# 提取<ul>标签内的内容
ul_content = match.group(1)
# 提取<li>标签内的文本内容
li_pattern = r'<li>(.*?)</li>'
li_matches = re.findall(li_pattern, ul_content)
# 输出结果
for li_text in li_matches:
print(li_text)
else:
print("未找到目标div标签")
正则表达式模式:
r'<div class="target-div">.*?<ul>(.*?)</ul>.*?</div>'
:这个模式匹配<div class="target-div">
标签内的所有内容,并捕获<ul>
标签内的内容。.*?
:非贪婪匹配,确保匹配尽可能少的内容。(.*?)
:捕获组,用于提取<ul>
标签内的内容。re.DOTALL
标志:使.
匹配包括换行符在内的所有字符,确保跨行匹配。
提取<li>
标签内容:
r'<li>(.*?)</li>'
:这个模式匹配<li>
标签内的文本内容。re.findall
:返回所有匹配的<li>
标签内容。Item 1
Item 2
Item 3
BeautifulSoup
或lxml
。class
或id
的不同)而失效,因此在使用正则表达式时要确保HTML结构相对稳定。