Scrapy

scrapy理论部分

2019-07-28  本文已影响0人  叶扬风起

一、第一步.....先把咱学习方向定一下....

scrapy

二、开撸

啥都不说,先来一张经典图.....


Scrapy
1. 架构

引擎(Scrapy Engine)
  引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。同时,它也是程序的入口。

调度器(Scheduler)
  调度器从引擎接受爬取请求(Request)并将它们入列,以便之佛引擎请求它们时提供给引擎,它是由Scrapy主进程进行自动控制的

下载器(Downloader)
  下载器负责获取页面数据并提供给引擎,而后将网站的响应结果对象提供个蜘蛛(Spider),具体点说,下载器负责处理产生最终发出的请求对象Requet并返回的响应生Response对象传递给蜘蛛

蜘蛛(Spiders)
  Spider是用户编写用于分析响应(Response)结果并从中提取Item(即获取Item)或额外跟进的URL的类。

数据管道(Item Pipeline)
  Item Pipeline负责处理被Spider提取出来的Item,典型的处理有清理、验证及持久化。

下载器中间件(Downloader middlewares)
  下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的Reponse.其提供一个简单的机制,通过插入自定义代码来扩展Scrapy的功能

Spider中间件(Spider middlewares)
  Spider中间件是在引擎及Spiser之间的特定钩子(specific hook),处理Spider的输入(Response)和输出(Item 及 Requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy的功能

2. 流程

1). 引擎打开一个网站,找到处理该网站的Spider冰箱该Spider请求第一个要爬取的URL

2). 引擎从Spider中获取第一个要爬取的URL并在调度器中一Request调度

3). 引擎向调度器请求下一个要爬取的URL。

4). 调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求reuqest方向)转发给下载器(Downloader)。

5). 一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回Response方向)发送给引擎

6). 引擎从下载器中接受Response并通过Spider中间件(输入方向)发送给Spider给引擎

7). Spider处理Response并返回到的Item及(跟进的)新的Request给引擎

8). 引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器

9). (从第二步)重复直到调度器中没有更多的Request,引擎关闭对该网站的执行进程

三、Request和Response对象

1. Request对象

Request对象用来描述一个HTTP请求
Request(url[, callback, method='GET', headers, body, cookies, meta,encoding='utf-8', priority=0, dont_filter=False, errback])

2. Response对象

Response对象用来描述一个HTTP响应,Response只是一个基类,根据响应内容的不同有如下子类:
● TextResponse
● HtmlResponse
● XmlResponse
  当一个页面下载完成时,下载器依据HTTP响应头部中的Content-Type信息创建某个Response的子类对象。我们通常爬取的网页,其内容是HTML文本,创建的便是HtmlResponse对象,其中HtmlResponse和XmlResponse是TextResponse的子类。实际上,这3个子类只有细微的差别,这里以HtmlResponse为例进行讲解。

response.headers.get('Content-Type')
response.headers.getlist('Set-Cookie')
reponse.text = response.body.decode(response.encoding)

四、安装

1. 安装xml和html解析库lxml
pip install lxml
2. 安装解析数字证书库pyOpenSSL
pip install pyOpenSSL
3. 安装网络传输及应用层协议库Twisted
pip install Twisted
4. 安装调用Windows API库pywin32
pip install pywin32
5. 安装scrapy
pip install scrapy
6.安装对JS的渲染库scrapy-splash

推荐一篇安装文章:Scrapy Splash

#配置貌似需要docker
pip install scrapy-splash
7. redis实现分布式队列爬虫scrapy-redis

推荐安装文章:scrapy-redis

pip install scrapy-redis

五、常用命令

#创建项目
scrapy startproject project_name
#使用模板创建爬虫
scrapy genspider spider_name URL
#运行spider_name蜘蛛
scrapy crawl spider_name
#调试网站
scrapy shell URL
#获取settings内属性名称
scrapy settings --get 属性名称
#手动运行单个爬虫
scrapy runspider scrapy_cn.py
#查看创建爬虫
scrapy list
#保存到外部文件格式
scrapy crawl spider_name -o 文件名.json/.csv/.xml/.pickle/.marshal
...
上一篇 下一篇

猜你喜欢

热点阅读