Scrapy
2015-07-08 08:59
190 查看
实现一个功能很简单的爬虫:目标类似论坛,抓取第一个目录页-》提取所有页面-》找出下一个目录页地址-》提取下一目录页的所有页面;
试着分开抓,第一次只抓第一个目录页,返回了15条没错;第二次只抓第二个目录页,返回了20条没错;一起抓的时候,返回结果依然随机,25-35之间都有可能。
在抓取具体条目时,返回了很多503错误,而scrapy会对每个503错误尝试3次,如果依然出错就直接扔掉这个页面。看了一下scrapy最后的stats,发现503有19个之多……
按此推理,应该是访问太频繁被服务器拒了!
后边的数值是并发限制,发现只有修改为1的时候才能完全不会出错,即使是2都有条目丢失的问题……
问题描述
运行的时候发现一个问题,抓取的数量不对。例如第一个目录页有15条,第二个目录页有20条,那么最终应该抓取到35条,但是实际发现最终抓取到的条目是随机的……试着分开抓,第一次只抓第一个目录页,返回了15条没错;第二次只抓第二个目录页,返回了20条没错;一起抓的时候,返回结果依然随机,25-35之间都有可能。
原因
找了半天发现代码没什么问题,由于之前将log_level设为了“warning”,因此也没有给出什么提示。将其改为默认,发现问题了。在抓取具体条目时,返回了很多503错误,而scrapy会对每个503错误尝试3次,如果依然出错就直接扔掉这个页面。看了一下scrapy最后的stats,发现503有19个之多……
按此推理,应该是访问太频繁被服务器拒了!
解决办法
首先想的是限制并发数量,在settings.py里修改,加上:CONCURRENT_REQUESTS = 1
后边的数值是并发限制,发现只有修改为1的时候才能完全不会出错,即使是2都有条目丢失的问题……
相关文章推荐
- BTC比特币钱包性能优化
- WEBI交叉表与Dashboard解决方法
- C和C++内存模型
- iOS block的用法
- JAVA基础----java中E,T,?的区别?
- XCL-Charts绘画面积图(AreaChart) 例1
- RPC
- Select模型
- LeetCode Valid Palindrome
- SQL Server中使用Trigger监控存储过程更改脚本实例
- CMD实例——DATE
- Java代码规范
- 全国电子商务人才专业化从业认证考试初级教程(公共基础教程)(全国电子商务人才丛业能力教育指定教材)
- Tiny4412开发板 LED灯的控制
- Debian\CentOS Linux配置管理
- sessionStorage在Google_Chrome浏览器中的用法
- 解决Unable to load BCP resource DLL
- Java 访问控制
- 在Ext JS 6中添加本地化包
- struts2 spring集成时struts.xml文件中action的class属性值意义