主要是里面的一个正则表达式在处理文本的时候用很长时间,导致程序几乎不可用.
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
![]() | 1 ljcarsenal 2015-03-11 22:38:07 +08:00 ![]() 用 标签筛选器 会不会快点。。 |
![]() | 2 cxshun 2015-03-11 22:58:14 +08:00 ![]() 正则表达式会慢很多,既然是HTML,建议用xpath。 |
3 JoeShu 2015-03-11 23:01:15 +08:00 1. 用scray 2. 用requests+beautifulsoup+multiprocess |
4 joddeapple OP |
5 joddeapple OP @JoeShu 我去看看,谢谢 |
![]() | 6 egrcc 2015-03-11 23:46:02 +08:00 确定是正则表达式的问题?正则的速度应该不慢才对 |
![]() | 7 chevalier 2015-03-11 23:47:24 +08:00 用scrapy自带的xpath试试,也很快 |
![]() | 8 ericls 2015-03-11 23:49:13 +08:00 如果想学习 建议asyncio + 各种选择器 |
![]() | 9 icedx 2015-03-11 23:52:49 +08:00 Python 的正则能用? |
![]() | 10 binux 2015-03-12 00:09:42 +08:00 ![]() 你的问题出在 .+? 和 re.DOTALL 上 .+? 全字符匹配,导致匹配栈太深 re.DOTALL 导致文字过长 一般情况下,正则是比建树要快的,但是你正则写得太烂也没有办法 |
![]() | 11 icedx 2015-03-12 00:20:46 +08:00 ![]() |
![]() | 12 hiddenman 2015-03-12 10:38:37 +08:00 豆瓣是学习爬数据的天堂。。 |
![]() | 13 StrayBugs 2015-03-12 19:34:05 +08:00 大致看了一下,主要应该不是正则的问题,而是你把所有的结果都合并成一条 string 了。页与页都是独立的,你用 list 放每个页面,再分别匹配就好啦。 |
![]() | 14 zhcheng 2015-03-12 19:45:23 +08:00 我不会。 最近在学Python 。 下面是收藏的一个来自 知乎 [关于Python 实现爬虫] 的回答, 有提到性能优化。希望有所帮助 http://www.zhihu.com/question/20899988/answer/24923424 |
15 joddeapple OP 谢谢大家的帮助. |
![]() | 16 ming2281 2015-04-01 13:33:25 +08:00 一般爬虫运行得比较慢的话,我基本转向threading和multiprocessing |