xyh2695368537 发表于 2022-12-5 20:24:00

正则问题

本帖最后由 xyh2695368537 于 2022-12-5 20:28 编辑

想要抓取这个网页里的评分(下图灰底部分),我这样写正则为啥返回是空列表
这个网址没有反爬
我的代码如下:

import re,requests
url = 'https://ssr1.scrape.center/detail/1'
txt = requests.get(url).text
r = re.findall('<p.*?score.*?>(.*?)</p>',txt)
print(r)

lxping 发表于 2022-12-5 20:44:58

本帖最后由 lxping 于 2022-12-5 20:59 编辑

1、你可以打印你的txt看一下抓取文件内容是不是跟网页上的有出入,正则公式匹不匹配;
2,用正则表达式爬取网页内容最好加上 re.S 让 . 号可以匹配换行符,还有就是在正则表达式前面加上r,表示原字符。
3、我改了一下试了一下,可以抓取到一个
r = re.findall(r'<p.*?score.*?sm">(.*?)</p>', txt, re.S)
r
['\n            9.5']

hrpzcf 发表于 2022-12-5 20:57:10

本帖最后由 hrpzcf 于 2022-12-5 20:58 编辑

因为返回的内容换行位置是十分随机的,所以需要 re.S 让点号可以匹配换行符(你理解成加了 re.S 标志,不管有没有换行符,re 都把字符串视作一行也可以)
r = re.findall(r"<p.*?score.*?>\s*(.*?)</p>", txt, re.S)
# ['9.5']

xyh2695368537 发表于 2022-12-5 21:01:02

hrpzcf 发表于 2022-12-5 20:57
因为返回的内容换行位置是十分随机的,所以需要 re.S 让点号可以匹配换行符(你理解成加了 re.S 标志,不管 ...

okok,感谢!!!解决了

cflying 发表于 2022-12-5 21:02:56

浏览器开发者模式中,元素和网站响应源码是两回事,不能等同哦。

xyh2695368537 发表于 2022-12-6 12:29:59

cflying 发表于 2022-12-5 21:02
浏览器开发者模式中,元素和网站响应源码是两回事,不能等同哦。

好的好的,感谢大佬!!!{:10_279:}

猪猪以都都 发表于 2022-12-7 10:21:46

r = re.findall(r'<p.*?score.*?sm">(.*?)</p>', txt, re.S)
r
['\n            9.5']
页: [1]
查看完整版本: 正则问题