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等查看官方文档