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

转载于:https://www.cnblogs.com/felixwang2/p/8796541.html

爬虫(十二):scrapy中spiders的用法相关推荐

  1. 实验二十二 SCVMM中的SQL Server配置文件

    实验二十二 SCVMM中的SQL Server配置文件 在VMM 2012中管理员可以使用 SQL Server 配置文件,在部署完成虚拟机之后,实现 SQL Server 数据库服务自动化部署并交付 ...

  2. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  3. python爬虫十二:初步使用Scrapy框架爬取数据

    1.通过pipelines操作拿到的数据 要点一:爬虫文件必须通过关键字yield生成器才能与pipelines建立链接才可以操作,当运行爬虫文件之后执行的顺序如下图简介,如果重写模块或者内部方法可能 ...

  4. 爬虫总结(二)-- scrapy

    转载:https://blog.csdn.net/omnispace/article/details/55652134 用现成的框架的好处就是不用担心 cookie.retry.频率限制.多线程的事. ...

  5. 【python爬虫】在scrapy中利用代理IP(爬取BOSS直聘网)

    同学们好,我又滚回来更新了,这一次我们要爬取的目标是BOSS直聘,BOSS直聘可以说是反爬虫一个很好的例子了,主要在于如果你访问他的次数过多,他就会出现验证码,要求你通过验证才能继续看,这样还算可以, ...

  6. Python3网络爬虫(十二):初识Scrapy之再续火影情缘

    转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 ...

  7. python爬虫十二种方法_Python爬虫的N种姿势

    问题的由来 前几天,在微信公众号(Python爬虫及算法)上有个人问了笔者一个问题,如何利用爬虫来实现如下的需求,需要爬取的网页如下(网址为:https://www.wikidata.org/w/in ...

  8. vs中列表分页符代码_电脑办公技巧Excel中Ctrl+K的使用技巧(十二)/Word2016中快速删除分页符与空白页的方法...

    ctrl+k是超链接的快捷键,你可以批量创建超链接,学会使用这个方法你可以快速在文件之间快速跳跃了,无比方便快捷,感兴趣的小伙伴一起看下去吧! 1.在Excel中打开另一个Excel文件(其他类型文件 ...

  9. Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由RouteNavigation

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

最新文章

  1. 修改centos7的网卡名
  2. 因为一次 Kafka 宕机,终于搞透了 Kafka 高可用原理!
  3. Internet Explorer 8 Beta2 常见问题解答
  4. Generative Adversarial Networks 生成对抗网络的简单理解
  5. Binder学习指南
  6. Linux常用服务部署与优化之NFS篇
  7. HD1281棋盘游戏(匹配+好题)
  8. openSUSE:系统安装(Windows和openSUSE双系统,硬盘安装)
  9. 前端小技巧-定位的活学活用之仿淘宝列表
  10. webpack 4.0 配置文件 webpack.config.js文件的放置位置
  11. PC登录Citrix WI时报CPS license acquisition error(500)错误 截图及解决
  12. Android系统集成app,Android系统集成第三方pre
  13. 第一次没有写出来的SQL
  14. Linux笔记(一)——虚拟机的安装与Centors安装,安装vmtools,虚拟机的克隆,虚拟机的快照,共享文件的使用
  15. 《普通心理学》读书笔记
  16. HTML表单基本结构
  17. 非素数模下的二次剩余
  18. K近邻算法(k-nearest neighbor,KNN)
  19. MySQL之MVCC原理
  20. 博主文章导航(分门别类,实时更新,永久置顶)

热门文章

  1. [Swift]LeetCode39. 组合总和 | Combination Sum
  2. ASP.NET Core 2.0 MVC 发布部署--------- ASP.NET Core 发布的具体操作
  3. nginx_反向代理
  4. 向其他进程注入代码的三种方法
  5. Windows上编译libpng
  6. 正则查找倒数第二个符合条件的字符串_EXCEL正则表达式的基础语法
  7. ubuntu mv和cp命令
  8. Matlab如何求离散点的导数
  9. Matlab 格式化字符串sscanf
  10. MongoDB基础使用