• Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法


    原文地址https://www.cnblogs.com/zhaof/p/7192503.html

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

    工作流程分析

    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查看分析

    通过上述代码我们可以看到在父类里这里实现了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的可迭代对象

  • 相关阅读:
    混合式应用开发之AngularJS ng-repeat数组有重复值的解决方法
    混合式应用开发之串口通讯(2)
    混合式应用开发之串口通讯(1)
    第一篇博客
    win10出现"本地计算机上的MySQL57服务启动后停止"
    彻底区分html的attribute与dom的property
    Angularv4入门篇1
    node开发后将本地mysql数据导入到服务器mysql
    weex入门
    Color.js 方便修改颜色值
  • 原文地址:https://www.cnblogs.com/111testing/p/10325391.html
Copyright © 2020-2023  润新知