zoukankan      html  css  js  c++  java
  • python爬虫之spider用法

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

    工作流程分析 :

      1. 以初始的URLRequest, 并设置回调函数, 当该requeset下载完毕并返回时, 将生成response, 并作为参数传递给回调函数. spider中初始的request是通过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_request来处理start_urls处理start_urls中的url, 这是因为在继承的scrapy.Spider中已经写过了

      在上述源码中可以看出在父类里实现了start_requests方法, 通过make_requests_from_url做了Request请求

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

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

  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/dong-/p/10306046.html
Copyright © 2011-2022 走看看