Scrapy 特点:使用了Twisted异步网络来处理网络通讯,整体的架构

scrapy传递 meta item scrapy items_scrapy传递 meta item

Scrapy 主要包括了以下的组件

  1. 引擎(scrapy)  用来处理整个系统的数据流处理,触发事务(框架核心)
  2. 调度器(scheduler)  用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回,可以想象成一个URL(抓取网页上的网址)的优先队列,由他来决定下一个要抓取的网址是什么,同事去掉重复的网址
  3. 下载器(downloader)  由于下载网页的内容,并将网页内容返回给蜘蛛(scrapy下载器是建立在twisted这个高效的异步模型上)
  4. 爬虫(spiders):爬虫是用来干活的,用于特定的网页中提取出自己想要的信息,即所谓实体(item)。用户也可以从中提取链接,让scrapy继续抓取下一个页面
  5. 项目管道(item pipeline):负责处理爬虫从网页中抽取实体,主要的功能是持久化实体,验证实体的有效性,消除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过特定的次序处理数据
  6. 下载器中间件(downloader middlewares):位于scrapy引擎和下载器之间的框架,主要处理scrapy引擎与下载器之间的请求及响应
  7. 爬虫中间件(spider middlewares):介于scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输入
  8. 调度中间件(scheduler middewares):介于scrapy引擎和调度之间的中间件,从scrapy引擎大送到调度的请求和响应

7,8:对象不同,下载器中间件的作用对象时请求request和返回response,爬虫中间件作用的对象时爬虫,他们的关系在图中可以很好的区分出来   return firstimage

ip代理和随机请求头:应该创建一个中间的插件,安插到每个Request发出去之前,补充proxy的信息,现在的反爬封ip都很严重,scrapy-redis还是好用的,后面在介绍。


Scrapy运行的流程

  1. 引擎从调度器中取出一个链接(URL)用于接下来的抓取
  2. 引擎吧URL封装成一个请求传给下载器
  3. 下载器把资源下载下来,并封装成应答包(response)
  4. 爬虫解析response
  5. 解析出实体(item),则交给实体管道进行进一步的处理
  6. 解析出的是链接(URL),则把URL交给调度器等待抓取

  1. scrapy startproject 项目名称        ----在当前目录中创建一个项目文件
  2. 进入创建的目录
  3. scrapy genspider <name> <domain>   (scrapy genspider baidu "baidu.com"  )
  4. 运行爬虫  scrapy crawl <name>  (scrapy genspider baidu)