2019独角兽企业重金招聘Python工程师标准>>>

前言

Scrapy是爬虫必须学会的一个框架!一般人确实很难搞的透彻!不过他的功能方面确实特别好用。

scrapy

scrapy 是一个异步爬虫框架,使用它,可以屏蔽很多复杂的底层设计,只需要解析下载下来的页面,更多了我们需要关注的是目标网站/页面爬取的难易程度,该怎么来实现它。虽然是,但是在爬取大量网站可能需要 用分布式的爬虫,当然scrapy 也有

操作流程图

指定一个起始url后,scrapy就可以根据以上原理图进行工作了。一个最简单的页面,指定页面的url进行第一次请求,经过引擎,交给调度器,然后调度器再返回给引擎,去下载这个页面,拿到这个页面就可以进行解析了。 这里明显看的出来绕了一个圈子,如果最简单的的页面,这样子会发现多了调度这一步。但是一般在实际业务中,特别是分布式爬虫,会有很多url 需要爬取,而且一些url是动态添加到待爬队列的,
我们将所有的待爬都在调度器进行分配,当然这里也有其他操作,比如,一个url已经调度过,那么会进行标识,做到不再重复爬取。

队列

scrapy 默认的队列

SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleLifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.LifoMemoryQueue'
SCHEDULER_PRIORITY_QUEUE = 'queuelib.PriorityQueue'

一般我们不关心这个队列结构,但是在做分布式时这个队列就需要替换

scrapy_redis

scrapy 本身是异步,但是不支持分布式爬取。 要做到分布式爬取,那么需要一个公共的待爬队列

scrapy_redis 需要制定队列结构,可在 SpiderQueue,SpiderStack,
SpiderPriorityQueue 中选者一个,形如

SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"

scrapy注意事项

这里说一下scrapy的一个要注意的细节问题,对个人来说,其实他的文档有些地方存在误导,当然我指的是中文文档,格式是标题加内容,区分通过数字。

scrapy流程问题中下载和请求有什么区别

流程图

如果对Python编程、网络爬虫、机器学习、数据挖掘、web开发、人工智能、面试经验交流。感兴趣可以519970686,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

spider通过engine产生Requests给Scheduler,之后通过Downloader产生Responses。这里有一个诡异的现象,比如我们通过request这个库写一个爬去百度的爬虫

import request
page = request.get('http://www.baidu.com')

可能request拼错了

这样的一行命令,就已经实现了把百度的页面下载下来这个功能,那么请求和下载在这行代码体现在哪里?

每一个请求的过程,就已经实现了下载,换句话说,请求就是下载。

那么,所谓scrapy的请求和下载是什么?
请求,就是url
下载,就是请求url或者说访问url

知道了这一点,很多东西都可以理解
比如,下载中间件这个东西
他是在parse函数前还是后执行?肯定是前啊,因为parse是下载
还有就是scrapy.Request在中间件之前还是之后?按照文档说法,Request通过下载中间件到下载啊,应该是之前啊,但其实,scrapy.Request在中间件后面执行。因为它是下载里面的(请求就是下载)。

当然,如果上面你不相信的话,可以试一下换代理,中间件需要这样一句代码

request.meta['proxy'] = 'http://192.13.2.2:8888'

之后,才是才是请求呢。你不会用的时候,觉得很多地方不合理。你就觉得工具很烂,应该是你用的不好。

转载于:https://my.oschina.net/u/3942476/blog/2252261

爱玛士关于爬虫的scrapy框架的心得相关推荐

  1. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  2. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  3. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  4. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

  5. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  6. Python3爬虫之Scrapy框架的下载器中间件

    Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...

  7. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  8. 爬虫之Scrapy框架爬取彼岸壁纸案例分享

    爬虫之Scrapy框架爬取彼岸壁纸案例分享 前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了. 代码如下. 文 ...

  9. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

最新文章

  1. BUG总结——记一次sql查询未按照想要的次序返回
  2. 【渝粤题库】陕西师范大学180208 产品管理 作业(专升本)
  3. 前端基础进阶之Promise
  4. atitit 编程语言概念与原理
  5. UPS电源知识(开发板销售http://huarm.taobao.com/ )
  6. 证明不是哈密顿图的几种方法归纳总结
  7. 名字作诗(藏头名字作诗)
  8. 《货币金融学》学习笔记
  9. 小牛电动Q2营收、利润双增,李一男身价却在6个月内减少8亿美元
  10. LTP性能测试工具的使用详解
  11. java-net-php-python-springboot办公自动化系统计算机毕业设计程序
  12. MeeGo开发者(二):MeeGo架构
  13. 泰坦尼克号人员预测模型(python/jupyter-notebook/数据挖掘/数据分析)
  14. 位置式PID与增量式PID区别浅析(百度百科增量式PID讲解思路概念更明确清晰)
  15. memset函数原型
  16. 人工智能伦理学的一知半解
  17. PM - 软件版本命名规范及各阶段说明
  18. MATLAB学习之数列极限(一)
  19. MIGO生产订单入库写入批次特性增强
  20. Spark官网下载速度过慢?试试清华的镜像

热门文章

  1. IOS 多线程的一些总结
  2. 新人新气象,给自己加油!
  3. UA MATH567 高维统计II 随机向量2 各向同性的随机向量
  4. 超图iClient 3D 入门程序 - 1
  5. java hibernate错误org/dom4j/DocumentException、org/jboss/logging/BasicLogger、org/apache/lucene/index...
  6. 把自己的文件做成ISO镜像文件
  7. Directx 顶点和顶点缓存
  8. 安装Windows服务时出现试图加载格式不正确的程序或系统找不到指定的文件以及相关问题
  9. C++ NULL指针学习 - Win32版本
  10. C++ Boost库初步使用 - 使用CFree