想爬豆瓣电影,用正则匹配出错,不清楚哪里不对,求搭救

2015-03-18 18:19:03 +08:00
 dedewei
页面: http://movie.douban.com/tag/%E6%97%A5%E5%89%A7?start=20&type=T

我用的正则:<a class="nbg" href="(.+?)" title="(.+?)".+?<p class="pl">(.+?)</p>

#####
<a class="nbg" href="(.+?)" title="(.+?)" ###这里匹配电影名和url没问题
.+? ###这里是想跳过中间,出错
<p class="pl">(.+?)</p> ###匹配电影描述,独立出来也没问题

目的是想一次过匹配电影名,url和电影描述,
在匹配好电影名和url之后用.+?跳过中间匹配(电影描述),--- .+?这里跳过不行,该怎样处理?

谢谢
3442 次点击
所在节点    Python
19 条回复
imn1
2015-03-18 18:25:01 +08:00
有没有用参数把圆点包括换行符?
wangfeng3769
2015-03-18 18:29:41 +08:00
beautifullsoup 可以自己搞。
dedewei
2015-03-18 18:30:03 +08:00
@imn1 .+? 这个没有跳过换行的吗? 用什么参数?能给个示例么.....谢谢。 也google去!
dedewei
2015-03-18 18:31:26 +08:00
@wangfeng3769 就匹配几十个页面,正则会快点吧
zhy0216
2015-03-18 18:32:35 +08:00
不要用正则爬网页...
dedewei
2015-03-18 18:34:14 +08:00
@imn1 用你给的提示换行搞掂了,把 .+? 换成 [\s\S]*
非常感谢!!!
zhy0216
2015-03-18 18:35:11 +08:00
imn1
2015-03-18 18:35:12 +08:00
建议善用排除正则,(?!(?:排除的字串)).*?
另外,py中正则的贪婪和非贪婪和我预想的差距很大,特别是 findall 多组匹配的时候,注意改动一下观察结果
dedewei
2015-03-18 18:36:42 +08:00
@zhy0216 匹配几十个页面,正则会快点?
dedewei
2015-03-18 18:37:37 +08:00
@imn1 刚发现结果不对..哭.....
dedewei
2015-03-18 18:40:53 +08:00
@imn1 还是没看懂,我再看看...
dedewei
2015-03-18 18:43:40 +08:00
@zhy0216 读了几遍,没懂...
dedewei
2015-03-18 18:56:04 +08:00
@imn1 原来是忘了添加 re.DOTALL 参数,问题已解决。谢谢
imn1
2015-03-18 18:59:04 +08:00
@dedewei
parse 几十个页面正则没有明显优势,但是如果几万个页面,正则花费时间是 lxml 的2/3或更少,bs4就更不用说了,载入页面dom是很耗资源的

我试过在一台老机器(带SSD)上单线程 parse 50+w 个 html,bs4 等了一小时没响应(死掉?),lxml+xpath 是2800+秒,正则是1600+秒,两个程序代码只有两行区别

(?!(?:\<p class……)).*? 代替中间你要无视的那段字串,你去查查这种写法,自己做几个例子就明白了
另外findall 做单句正则分组匹配真的很烦,有时用*和+结果相差甚远(有字符的情况),我经常要调试好几次才成功
libo26
2015-03-18 19:35:07 +08:00
表示用Beautifulsoup挺方便的
frankzeng
2015-03-18 20:17:30 +08:00
Beautifulsoup或xpath,为什么非要用虐心的正则表达式,写正则表达式可费脑了
mutoulbj
2015-03-18 20:51:41 +08:00
pyquery大法好~
dedewei
2015-03-19 10:09:32 +08:00
@imn1 多谢指导!
dedewei
2015-03-19 10:10:20 +08:00
@frankzeng 小白,一切以运行成功为目的.....不过正则真的很痛苦.....

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

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

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

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

© 2021 V2EX