Python中使用正则表达式提取不到内容怎么办?
爬取猫眼 100 名电影,结果检测正则表达式提取内容的时候返回的结果为空。
def parse_one_page(html):
pattern = re.compile(
‘<dd>.?board-index.?>(.?)</i>.?data-src="(.?)".?name.?a.?>(.?)</a>.?star.?>(.?)</p>.?releasetime.?>(.?)</p>.?integer.?>(.?)</i>.?fraction.?>(.?)</i>.?</dd>’,
re.S)
items = re.findall(pattern, html)
print(items)
这是第一个;
import re
def parse_one_page(html):
pattern = re.compile(’<dd>.?board-index.?>(\d+)</i>.?data-src="(.?)".?name">’
+ '<a.?>(.?)</a>.?“star”>(.?)</p>.?releasetime">(.?)</p>’
+ '.?integer">(.?)</i>.?fraction">(.?)</i>.?</dd>’, re.S)
items = re.findall(pattern, html)
for item in items:
yield {
‘index’: item[0],
‘image’: item[1],
‘title’: item[2],
‘actor’: item[3].strip()[3:],
‘time’: item[4].strip()[5:],
‘score’: item[5] + item[6]
}
def main():
url = ‘http://maoyan.com/board/4’
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
这是第二种方式。
发现都提取不出来内容,但是如果用完整的代码则在最后运行的时候会正确显示……
Python中使用正则表达式提取不到内容怎么办?
https://regex101.com
推荐你用这个测试正则,右上会有语法解析
正则表达式提取不到内容,常见原因和排查方法如下:
1. 检查正则表达式模式
import re
text = "价格:¥199.99"
pattern = r"¥(\d+\.?\d*)" # 匹配¥符号后的数字
match = re.search(pattern, text)
if match:
print(f"提取到:{match.group(1)}") # 输出:199.99
else:
print("未匹配到内容")
2. 确认文本编码和特殊字符
# 处理换行符
text = "第一行\n第二行"
pattern = r"第二行"
match = re.search(pattern, text, re.DOTALL) # DOTALL模式让.匹配换行符
3. 使用正确的匹配方法
# search() vs match()
text = "开头 中间内容 结尾"
print(re.match(r"中间", text)) # None,match只匹配开头
print(re.search(r"中间", text)) # 匹配成功
# findall() 提取所有匹配
text = "苹果10元,香蕉20元"
prices = re.findall(r"\d+元", text) # ['10元', '20元']
4. 调试技巧
import re
def debug_regex(pattern, text):
try:
matches = re.findall(pattern, text)
print(f"模式: {pattern}")
print(f"文本: {text}")
print(f"匹配结果: {matches}")
return matches
except re.error as e:
print(f"正则表达式错误: {e}")
# 测试
debug_regex(r"\d+", "abc123def")
5. 常见陷阱
- 贪婪匹配:
.*会匹配到最后一个符合条件的字符 - 非贪婪匹配:
.*?匹配到第一个符合条件的字符 - 转义字符:
\d匹配数字,\.匹配点号本身
建议:先用简单模式测试,逐步完善正则表达式。
谢谢了。不过重新写代码后发现居然能运行了
写这么长正则解析 html 的教程是为了找人切磋不是教人的吧,劝楼主另寻教程。。。关键词:bs4
比较好的办法是先用正则提取出主要数据,再用 XML / HTML 解析器解成结构化数据,再去读取遍历。
楼主你看的么破教程啊,教人抽取复杂的网页用正则。。。。
乖乖去用 beautiful soup 去,一个 css 选择器就抽出来,节省自己点时间和生命吧
建议楼主学习 一下 xPath 语法,写代码效率比正则要高多了,在 scrapy 中直接就可以用。 比较容易入手还是推荐 BS4
正则写的爽
bs4+1

