python爬虫之spider用法

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

 

工做流程分析 :dom

  1. 以初始的URLRequest, 并设置回调函数, 当该requeset下载完毕并返回时, 将生成response, 并做为参数传递给回调函数. spider中初始的request是经过start_requests()来获取的. start_requests()获取start_urls中的URL, 并以parse以回调函数生成Requestscrapy

  2. 在回调函数内分析返回的网页内容, 能够返回item对象, 或者Dict,或者Request, 以及是一个包含三者的可迭代的容器, 返回的Request对象以后会通过Scrapy处理, 下载相应的内容, 并调用设置的callback函数.ide

  3. 在回调函数, 能够经过lxml, bs4, xpath, css等方法获取咱们想要的内容生成item函数

  4. 最后将item传送给pipeline处理源码分析

源码分析 :post

  在spiders下写爬虫的时候, 并无写start_request来处理start_urls处理start_urls中的url, 这是由于在继承的scrapy.Spider中已经写过了网站

  在上述源码中能够看出在父类里实现了start_requests方法, 经过make_requests_from_url作了Request请求url

  上图中, parse回调函数中的response就是父类中start_requests方法调用make_requests_from_url返回的结果, 而且在parse回调函数中能够继续返回Request, 就像代码中yield request()并设置回调函数.xml

spider内的一些经常使用属性 :

  全部本身写的爬虫都是继承于spider.Spider这个类

  name:

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

  allowed_domains:

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

  start_urls:

    其实的URL列表

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

  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的可迭代对象.

相关文章
相关标签/搜索