求教:初学 python,写了一个搜集豆瓣图书评价信息的爬虫, 但是运行时间过长.

2015-03-11 22:10:25 +08:00
 joddeapple

主要是里面的一个正则表达式在处理文本的时候用很长时间,导致程序几乎不可用.
turple_list = re.findall(r'href="(http://book.douban.com/subject/\d+?/)"\s+?title="(.+?)".+?"rating_nums">(.+?)<.+?class="pl">.+?(\d+?)人评价)',text,re.DOTALL)

有没有什么办法改进呢?

求指教.

源代码:https://github.com/nexusfool/project_code/blob/master/s_book.py

4386 次点击
所在节点    Python
16 条回复
ljcarsenal
2015-03-11 22:38:07 +08:00
用 标签筛选器 会不会快点。。
cxshun
2015-03-11 22:58:14 +08:00
正则表达式会慢很多,既然是HTML,建议用xpath。
JoeShu
2015-03-11 23:01:15 +08:00
1. 用scrapy
2. 用requests+beautifulsoup+multiprocess
joddeapple
2015-03-11 23:01:59 +08:00
@cxshun
@ljcarsenal
这两种东西都是第一次听到,谢谢
joddeapple
2015-03-11 23:05:30 +08:00
@JoeShu 我去看看,谢谢
egrcc
2015-03-11 23:46:02 +08:00
确定是正则表达式的问题?正则的速度应该不慢才对
chevalier
2015-03-11 23:47:24 +08:00
用scrapy自带的xpath试试,也很快
ericls
2015-03-11 23:49:13 +08:00
如果想学习
建议asyncio + 各种选择器
icedx
2015-03-11 23:52:49 +08:00
Python 的正则能用?
binux
2015-03-12 00:09:42 +08:00
你的问题出在 .+? 和 re.DOTALL 上

.+? 全字符匹配,导致匹配栈太深
re.DOTALL 导致文字过长

一般情况下,正则是比建树要快的,但是你正则写得太烂也没有办法
icedx
2015-03-12 00:20:46 +08:00
本来是想写个完整版的
但是看到虫子菊楼上回了... 唉...
身为弱渣的我...

一半将就看吧
https://gist.github.com/anonymous/9cc4e94afb244f335fee
hiddenman
2015-03-12 10:38:37 +08:00
豆瓣是学习爬数据的天堂。。
StrayBugs
2015-03-12 19:34:05 +08:00
大致看了一下,主要应该不是正则的问题,而是你把所有的结果都合并成一条 string 了。页与页都是独立的,你用 list 放每个页面,再分别匹配就好啦。
zhcheng
2015-03-12 19:45:23 +08:00
我不会。 最近在学Python 。
下面是收藏的一个来自 知乎 [关于Python 实现爬虫] 的回答, 有提到性能优化。希望有所帮助

http://www.zhihu.com/question/20899988/answer/24923424
joddeapple
2015-03-15 08:05:32 +08:00
谢谢大家的帮助.
ming2281
2015-04-01 13:33:25 +08:00
一般爬虫运行得比较慢的话,我基本转向threading和multiprocessing

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

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

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

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

© 2021 V2EX