scrapy介绍
第一重要的文档当然是官方文档[1],看完入门介绍[2]之后,重点关注一下几个方面:
系统架构
中间件
user-agent的选择
class UserAgentMiddleware(object):
""" 换User-Agent """
def process_request(self, request, spider):
agent = random.choice(agents)
request.headers["User-Agent"] = agent
proxy ip 代理更换
方法一: 使用Random proxy middleware for Scrapy,可以直接用pip install scrapy_proxies
,这是在多个代理ip中随机切换
方法二: 如果只有一个代理,可以直接设置环境变量来实现。也可以使用scrapy自带的proxy插件。多代理的代码实现也可以参考stackoverflow: Scrapy and proxies
pipeline
一些核心的类
- request
- response
可能用到的python知识
理解yield之What does the “yield” keyword do in Python?
更高级的话题
- 分布式
源码分析
csdn上self-motivation写的一系列scrapy源码分析,例如可以通过设置RANDOMIZE_DOWNLOAD_DELAY = True来开启随机下载延迟
使用举例
github上关于新浪微博的抓取项目, 新浪微博爬虫(Scrapy、Redis)
安装问题
安装环境
linux mint (ubuntu 14)
python 2.7.6
scrapy 1.3.3
(一) Twisted TLSVersion的问题
直接使用sudo pip install scrapy
安装最新的scrapy,在shell命令行内运行scrapy出现error提示
twisted/internet/_sslverify.py", line 38, in TLSVersion.TLSv1_1: SSL.OP_NO_TLSv1_1, AttributeError: 'module' object has no attribute 'OP_NO_TLSv1_1'
从上面的错误提示中,能够大概看出是Twisted包的问题。使用pip list
查看各个包的版本号,Twisted的版本号是17。有两种解决办法,
降低Twsited的版本号
使用sudo pip install Twsited==16.4.1
,降低版本之后,发现scrapy就可以正常使用了使用虚拟环境
官方安装文档[3]中有提到推荐使用virtual environment的方式安装scrapy,更具体参考这一节install scrapy using virtualenv 和 virtualenv的官方指南
shell过程如下
$ sudo pip install virtualenv #安装虚拟环境工具
$ virtualenv ENV #创建一个虚拟环境目录
$ source ./ENV/bin/activate #激活虚拟环境, 注意下面$前面的(Env)
(ENV) $ pip install Scrapy
(ENV) $ deactivate # 禁止激活
$ rm -r ENV #移除虚拟环境目录
(二)no module named win32api 问题
在windows环境中会遇到这个问题,原因是缺少win32,到 http://sourceforge.net/projects/pywin32/files/找到对应的版本下载安装即可