Scrapy crawspider和Scrapy_Redis分布式爬虫总结

Scrapy框架的简单使用

创建项目:scrapy startproject xxx

进入项目:cd xxx #进入某个文件夹下

创建爬虫:scrapy genspider xxx(爬虫名) xxx.com (爬取域)

生成文件:scrapy crawl xxx -o xxx.json (生成某种类型的文件)

运行爬虫:scrapy crawl XXX

列出所有爬虫:scrapy list

Scrapy框架的整体架构和组成


Scrapy crawspider和Scrapy_Redis分布式爬虫总结_第1张图片

图中绿色的是数据的流向

我们看到图里有这么几个东西,分别是

Spiders:爬虫,定义了爬取的逻辑和网页内容的解析规则,主要负责解析响应并生成结果和新的请求

Engine:引擎,处理整个系统的数据流处理,出发事物,框架的核心。

Scheduler:调度器,接受引擎发过来的请求,并将其加入队列中,在引擎再次请求时将请求提供给引擎

Downloader:下载器,下载网页内容,并将下载内容返回给spider

ItemPipeline:项目管道,负责处理spider从网页中抽取的数据,主要是负责清洗,验证和向数据库中存储数据

Downloader Middlewares:下载中间件,是处于Scrapy的Request和Requesponse之间的处理模块

Spider Middlewares:spider中间件,位于引擎和spider之间的框架,主要处理spider输入的响应和输出的结果及新的请求middlewares.py里实现

1.spider的yeild将request发送给engine

2.engine对request不做任何处理发送给scheduler

3.scheduler,生成request交给engine

4.engine拿到request,通过middleware发送给downloader

5.downloader在\获取到response之后,又经过middleware发送给engine

6.engine获取到response之后,返回给spider,spider的parse()方法对获取到的response进行处理,解析出items或者requests

7.将解析出来的items或者requests发送给engine

8.engine获取到items或者requests,将items发送给ItemPipeline,将requests发送给scheduler(ps,只有调度器中不存在request时,程序才停止,及时请求失败scrapy也会重新进行请求)

CrawlSpider是一个类,父类是scrapy.Spider。

CrawlSpider不仅有Spider的功能,还有自己独特功能

特有功能:CrawlSpider可以定义规则,解析html时可根据链接规则

提取出指定链接,然后再向这些链接发送请求。

通常用于:如果有需要跟进链接的需求,爬取网页之后,需要提取链接再次爬取。

  如何提取链接?

链接提取器,在这里就可以写规则提取指定链接

scrapy.linkextractors.LinkExtractor(

    allow = (),    # 正则表达式  提取符合正则的链接

    deny = (),     # (不用)正则表达式  不提取符合正则的链接

  allow_domains = (),  # (不用)允许的域名

    deny_domains = (),   # (不用)不允许的域名

    restrict_xpaths = (), # xpath,提取符合xpath规则的链接

    retrict_css = ()  # 提取符合选择器规则的链接)

你可能感兴趣的:(Scrapy crawspider和Scrapy_Redis分布式爬虫总结)