zoukankan      html  css  js  c++  java
  • 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的可迭代对象

  • 相关阅读:
    SparkR初体验2.0
    R语言数据集合并、数据增减、不等长合并
    采坑复盘:logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名
    flask实战-个人博客-编写博客前台
    flask实战-个人博客-电子邮件支持
    linux虚拟机获取不到ip的解决方法 --
    flask实战-个人博客-视图函数
    flask实战-个人博客-表单
    flask实战-个人博客-模板 --
    flask实战-个人博客-数据库-生成虚拟数据 --
  • 原文地址:https://www.cnblogs.com/111testing/p/10325391.html
Copyright © 2011-2022 走看看