正则问题
本帖最后由 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: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:58 编辑
因为返回的内容换行位置是十分随机的,所以需要 re.S 让点号可以匹配换行符(你理解成加了 re.S 标志,不管有没有换行符,re 都把字符串视作一行也可以)
r = re.findall(r"<p.*?score.*?>\s*(.*?)</p>", txt, re.S)
# ['9.5']
hrpzcf 发表于 2022-12-5 20:57
因为返回的内容换行位置是十分随机的,所以需要 re.S 让点号可以匹配换行符(你理解成加了 re.S 标志,不管 ...
okok,感谢!!!解决了 浏览器开发者模式中,元素和网站响应源码是两回事,不能等同哦。 cflying 发表于 2022-12-5 21:02
浏览器开发者模式中,元素和网站响应源码是两回事,不能等同哦。
好的好的,感谢大佬!!!{:10_279:} r = re.findall(r'<p.*?score.*?sm">(.*?)</p>', txt, re.S)
r
['\n 9.5']
页:
[1]