新手学习正则练习时碰到的一个问题

2018-10-21 08:52:47 +08:00
 zasilla

python 版本 3.6.5,代码如下:

import requests

import re

content = requests.get('http://book.douban.com/').text

pattern = re.compile('<li.?href="(.?)".?title="(.?)".*?', re.S)

results = re.findall(pattern, content)

print(results)

代码在 results = re.findall(pattern, content)这里卡住了,如果将

pattern = re.compile('<li.?href="(.?)".?title="(.?)".*?', re.S)

去掉一个()

pattern = re.compile('<li.?title="(.?)".*?', re.S)

就能正确的运行,请问我是哪里出错了?希望大家指教

2463 次点击
所在节点    Python
7 条回复
summerwar
2018-10-21 09:35:34 +08:00
正则不对,?表示重复零次或一次,网址和标题哪有那么短
PulpFunction
2018-10-21 09:45:54 +08:00
写代码不能试着写啊…

1 解析网页直接上正则不太好,2requests 不加 head 容易被封

非要上正则的话,你把 findall 参数搞混错了…

建议再看文档: http://www.runoob.com/python/python-reg-expressions.html

还可以了解一下 Beautifulsoup 等等
SpiderXiantang
2018-10-21 09:55:40 +08:00
了解下 xpath 不过正则还是得学的
GreatTony
2018-10-21 10:10:44 +08:00
html 用正则解析效率很低和出错率挺高的,用这个库吧: https://github.com/kennethreitz/requests-html,requests 的作者的另一库,非常好用
frostming
2018-10-22 10:48:33 +08:00
学正则的时候验证一下表达式
http://tool.oschina.net/regex
wersonliu9527
2018-10-22 15:16:11 +08:00
不想正则搞晕,直接用谷歌浏览器的 copy xpath 功能加上 xpath helper 插件吧
canwushuang
2018-10-23 15:01:01 +08:00
问题在于问号 “?” 问好表示非贪婪

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/499557

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX