Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取(更确切来说,网络抓取)所设计的, 也可以应用在获取API所返回的数据(例如Amazon Associates Web Services) 或者通用的网络爬虫。
scrapy startproject scrapy_test
#scrapy genspider 项目名 项目url
scrapy genspider quotes quotes.toscrape.com
scrapy crawl quotes
错误代码:
UnicodeEncodeError: 'gbk' codec can't encode character '\u2764' in position 11162: illegal multibyte sequence
解决办法:
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
我们看看scrapy的爬虫流程图:
基本的爬虫框架:
scrapy_test/
scrapy_test/
spiders/
__init__.py
quotes.py
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
scrapy.cfg
Scrapy Engine: 这是引擎,负责Spiders、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等等!
Scheduler(调度器): 它负责接受引擎发送过来的requests请求,并按照一定的方式进行整理排列,入队、并等待Scrapy Engine(引擎)来请求时,交给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spiders来处理,
Spiders:它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
Item Pipeline:它负责处理Spiders中获取到的Item,并进行处理,比如去重,持久化存储(存数据库,写入文件,总之就是保存数据用的)
Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件
Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spiders中间‘通信‘的功能组件(比如进入Spiders的Responses;和从Spiders出去的Requests)
在scrapy中我们为了抽取一个网站的详细内容的时候,我们在对应spider里面可能写了很多的抽取代码,但是我们不能每次执行整个大项目调试,这个时候为了试某个抽取代码的时候,我们可以直接在终端键入如下命令,然后就可以从头到尾的调试自己的每一条抽取代码。
#scrapy shell 网站地址
scrapy shell http://quotes.toscrape.com/
保存为json文件
scrapy crawl quotes -o quotes.json
.json #json文件(包在一个大列表里面的一个个字典形式)
.jl #一个一个 独立的字典形式
.xml #xml文件
.csv #csv文件
.pickle #pickle文件
.fpt #ftp://user:password@ftp.server.com/path/quotes.cvs(别忘了既然是保存肯定是有文件路径+名字(保存类型))