Scrapy 是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,只需要定制开发几个模块就可以轻松的实现一个爬虫。
安装
Scrapy官网和官方安装文档。
直接使用PIP安装
pip install Scrapy
注意:
Scrapy依赖这些python包:
- lxml
- parsel
- w3lib
- twisted
- cryptography and pyOpenSSL
对于Scrapy最小的包版本:
- Twisted 14.0
- lxml 3.4
- pyOpenSSL 0.14
Scrapy新项目
使用命令创建一个Scrapy新项目:
scrapy startproject 项目名称
例如创建一个名叫TaoBao的项目:scrapy startproject TaoBao
项目结构
TaoBao/
scrapy.cfg # Scrapy项目配置文件
TaoBao/ # Python 项目module
__init__.py
items.py # 项目的Item定义位置
pipelines.py # 项目的Pipeline文件
settings.py #项目的设置文件
spiders/ # 蜘蛛目录
__init__.py
编写一个蜘蛛
我们以爬取淘宝和天猫数据为例,我们通过淘宝的搜索结果然后爬取搜索出来的内容。在spiders目录下面新建一个名叫TmallAndTaoBaoSpider的蜘蛛:
class TmallAndTaoBaoSpider(Spider):
name = "tts"
allowed_domains = ['tmall.com', 'taobao.com']
start_urls = []
def parse(self, response):
pass
这里需要解释一下,每一个蜘蛛都要继承Spider
,这是Scrapy提供的基础蜘蛛,Spider
中有3个变量必须定义:
-
name
- 蜘蛛的名字,等会儿通过命令行启动蜘蛛的时候用到 -
allowed_domains
- 限定蜘蛛爬取的域,以免去爬一些我们不关心的网站内容,上面只爬淘宝和天猫的。是一个数组 -
start_urls
- 从哪儿开始爬。是一个数 组 -
def parse(self, response):
- 这里就是蜘蛛通过下载器下载好的内容回调,通过这个方法可以取到网页内容。
这样一个简单的蜘蛛就完成了,可以通过命令:
scrapy crawl tts
来启动。当然上面的代码还什么都抓不到,因为start_urls没有填写,parse
也还没有实现。
总结
简单的实现了一个蜘蛛,这个蜘蛛现在只能抓取静态网页,如果网站包含了动态内容,或者很多ajax请求,那么这样是抓不到完整数据的,下面会通过selenium来抓取动态网页,淘宝和天猫都是动态的。
不登高山,不知天之高也;不临深溪,不知地之厚也
感谢指点、交流、喜欢