Scrapy简介
scrapy发出的请求是异步的,默认过滤掉相同的url。能做html/xml解析,数据能导出多种格式,还有强大的插件系统
scrapy(1.2.2)目前支持python 3,但是官方文档是也有说明,并不支持windows平台上的python3,因为scrapy的核心依赖Twisted
目前并不支持windows平台上的python 3,所以知乎上有人推荐使用python 2.7,并需要安装Visual C++ Compiler for Python 2.7,并且window10 也支持这个软件,但是按照python开发者手册上的说明,python2.7只会维护到2020年,并且python的未来也是指向python 3,基本上主流库都支持了python 3,并且很多库已经开始不支持python 2了,所以这里我还是想使用python 3.
关于为什么不支持windows平台,原因是windows上不能编译scrapy的依赖lxml
和Twisted
,但是我们可以下载已经编译好的whl
包,用pip
安装即可,详情,可以参考这篇博客: python 3.5 + scrapy1.2 windows下的安装
Scrapy使用
创建项目
|
|
将会在当前工作目录下创建test_scrapy
文件夹,文件下下有以下内容:
|
|
第一个爬虫
我们编写的爬虫类必须继承scrapy.Spider
并定义好初始请求链接,并且应该将文件放置在spiders
目录下。
我们在spiders
目录下创建quotes_spider.py
:
|
|
name
是spider名称,同一项目中不能同名
start_requests()
必须返回可迭代的Requests
(一个Requests
列表或者是生成器对象),这些请求是爬虫初始的爬取对象.scrapy提供一种简单实现start_requests()
的方式,就是使用start_urls
列表,该列表在后台会被自动封装成Requests
生成器并使用默认的回掉函数parse()
|
|
parse()
是默认的回调函数。Request
可以设置得到响应后的回调函数。
运行爬虫
在项目的根目录执行:
|
|
quotes
是爬虫名
将会看到以下输出:
|
|
并在根目录生成quotes-1.html
和quotes-2.html
解析网页
使用类选择器对html/xml进行解析,同时scrapy也支持XPath表达式
|
|
response.css()
返回列表,如果想提取第一个,可以这样:
|
|
推荐使用第一种方式,这样,如果response.css()
返回空列表,前者会返回None
,后者会触发异常
除了使用 extract()
和 extract_first()
提取数据,也可以使用re()
进行正则提取
|
|
Following links
|
|
|
|
命令行工具
|
|
更多命令以及命令的详细使用方法请参考官方文档
CrawlSpider
除了继承scrapy.Spider
,常用的还有scrapy.spiders.CrawlSpider
,该类可以在前者的基础上添加Rule
。
|
|
SitemapSpider
scrapy.spiders.SitemapSpider
可以根据sitemaps和robots.txt进行爬去
|
|
规则中表示含有/shop/
的url的回调函数为parse_shop
,sitemap_follow
表示只跟随包含/sitemap_shops
的url
Item
python自带的dict
没有结构体的概念,所以scrapy提供了Item
类
|
|
|
|
Item Loader能够更好将response
中的数据注入到Item
中
|
|
Item Pipeline
Item
被爬取后会发送给pipeline进行处理,一般pipeline是只用实现process_item
的类,也可以实现open_spider()
(爬虫开始前执行)和close_spider()
|
|
以上是scrapy基础内容,更多有关scrapy,如log和email等查看官方文档