爬虫(十二):scrapy中spiders的用法

Spider类定义了如何爬去某个网站,包括爬取的动做以及如何从网页内容中提取结构化的数据,总的来讲spider就是定义爬取的动做以及分析某个网页css

工做流程分析

  1. 以初始的URL初始化Request,并设置回调函数,当该request下载完毕并返回时,将生成response,并做为参数传给回调函数. spider中初始的requesst是经过start_requests()来获取的。start_requests()获取 start_urls中的URL,并以parse以回调函数生成Request 
  2. 在回调函数内分析返回的网页内容,能够返回Item对象,或者Dict,或者Request,以及是一个包含三者的可迭代的容器,返回的Request对象以后会通过Scrapy处理,下载相应的内容,并调用设置的callback函数
  3. 在回调函数内,能够经过lxml,bs4,xpath,css等方法获取咱们想要的内容生成item
  4. 最后将item传递给Pipeline处理

咱们以经过简单的分析源码来理解
我一般在写spiders下写爬虫的时候,咱们并无写start_requests来处理start_urls中的url,这是由于咱们在继承的scrapy.Spider中已经写过了,咱们能够点开scrapy.Spider查看分析dom

 

经过上述代码咱们能够看到在父类里这里实现了start_requests方法,经过make_requests_from_url作了Request请求
以下图所示的一个例子,parse回调函数中的response就是父类列start_requests方法调用make_requests_from_url返回的结果,而且在parse回调函数中咱们能够继续返回Request,以下属代码中yield Request()并设置回调函数。scrapy

 

spider内的一些经常使用属性

咱们全部本身写的爬虫都是继承与spider.Spider这个类ide

name函数

定义爬虫名字,咱们经过命令启动的时候用的就是这个名字,这个名字必须是惟一的post

allowed_domains网站

包含了spider容许爬取的域名列表。当offsiteMiddleware启用时,域名不在列表中URL不会被访问
因此在爬虫文件中,每次生成Request请求时都会进行和这里的域名进行判断url

start_urlsspa

起始的url列表
这里会经过spider.Spider方法中会调用start_request循环请求这个列表中每一个地址。xml

custom_settings

自定义配置,能够覆盖settings的配置,主要用于当咱们对爬虫有特定需求设置的时候

设置的是以字典的方式设置:custom_settings = {}

from_crawler

这是一个类方法,咱们定义这样一个类方法,能够经过crawler.settings.get()这种方式获取settings配置文件中的信息,同时这个也能够在pipeline中使用

start_requests()
这个方法必须返回一个可迭代对象,该对象包含了spider用于爬取的第一个Request请求
这个方法是在被继承的父类中spider.Spider中写的,默认是经过get请求,若是咱们须要修改最开始的这个请求,能够重写这个方法,如咱们想经过post请求

make_requests_from_url(url)
这个也是在父类中start_requests调用的,固然这个方法咱们也能够重写

parse(response)这个其实默认的回调函数负责处理response并返回处理的数据以及跟进的url该方法以及其余的Request回调函数必须返回一个包含Request或Item的可迭代对象

相关文章
相关标签/搜索