python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制
CrawlSpider实现的全站数据的爬取
- 新建一个工程
- cd 工程
- 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com
- 连接提取器LinkExtractor
- 可以根据指定的规则对指定的连接进行提取
- 提取的规则就是构造方法中的allow(‘正则表达式’)参数决定
 
 
- 可以根据指定的规则对指定的连接进行提取
- 规则解析器Rule
- 可以将将连接提取器提取到的连接进行请求发送,可以根据指定的规则(callback)对请求到的数据进行解析
 
- follow=True:将连接提取器 继续作用到 连接提取器提取到的连接 所对应的 页面源码中
分布式
- 实现方式:scrapy+scrapy_redis组件实现的分布式。scrapy+redis 
- 原生的scrapy是不可以实现分布式的!!! 
- 什么是分布式 - 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一个网络资源
 进行联合且分布的数据爬取。
 
- 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一个网络资源
- 为什么scrapy不可以实现分布式 - 调度器不可以被共享
- 管道不可以被共享
 
- scrapy-reids组件的作用是什么 
- 提供可以被共享的管道和调度器 
- 分布式的实现流程 - 环境的安装:pip install scrapy-redis 
- 创建工程 
- cd 工程 
- 创建爬虫文件: - 基于Spider
- 基于CrawlSpider
 
- 修改爬虫文件: - 导报:
 from scrapy_redis.spiders import RedisCrawlSpider#基于crawlSpider爬虫文件
 from scrapy_redis.spiders import RedisSpider #基于Spider爬虫文件
- 将当前爬虫类的父类修改为RedisCrawlSpider
- 删除allowed_domains和start_urls
- 添加一个redis_key = ‘xxx’属性,表示的是调度器队列的名称、
- 根据常规形式编写爬虫文件后续的代码
 
- 导报:
- 修改settings配置文件 - 指定管道 
 ITEM_PIPELINES = {
 'scrapy_redis.pipelines.RedisPipeline': 400
 }
- 指定调度器 - 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化- DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" - 使用scrapy-redis组件自己的调度器- SCHEDULER = "scrapy_redis.scheduler.Scheduler" - 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据 - SCHEDULER_PERSIST = True 
- 指定redis数据库 
 REDIS_HOST = '192.168.13.254'
 REDIS_PORT = 6379
 
- 修改redis的配置文件redis.windows.conf - 关闭默认绑定
- 56行:#bind 127.0.0.1
 
- 关闭保护模式
- 75行:protected-mode no
 
 
- 关闭默认绑定
- 启动redis的服务端(携带配置文件)和客户端 
- 启动分布式的程序: - scrapy runspider xxx.py
 
- 向调度器的队列中扔入一个起始的url - 队列是存在于redis中
- redis的客户端中:lpush sun www.xxx.com
 
- 在redis中就可以查看爬取到的数据 
 
增量式
- 概念:监测
- 核心技术:去重
- 适合使用增量式的网站:
- 基于深度爬取
- 对爬取过的页面的url进行一个记录(记录表)
 
- 基于非深度爬取
- 记录表:爬取过的数据对应的数据指纹
- 数据指纹:就是原始数据的一组唯一标识
 
 
- 记录表:爬取过的数据对应的数据指纹
 
- 基于深度爬取
- 所谓的记录表是以怎样的形式存在于哪?
- redis的set充当记录表
 
反爬机制
- robots
- UA伪装
- 图片懒加载
- 验证码
- cookie
- 动态加载的数据
- 动态变化的请求参数
- js加密
- js混淆
- 代理
python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制的更多相关文章
- python爬取实习僧招聘信息字体反爬
		参考博客:http://www.cnblogs.com/eastonliu/p/9925652.html 实习僧招聘的网站采用了字体反爬,在页面上显示正常,查看源码关键信息乱码,如下图所示: 查看网页 ... 
- Python爬虫工程师必学——App数据抓取实战   ✌✌
		Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ... 
- Python爬虫工程师必学APP数据抓取实战✍✍✍
		Python爬虫工程师必学APP数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ... 
- Python爬虫工程师必学——App数据抓取实战
		Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ... 
- Python爬虫入门教程 16-100 500px摄影师社区抓取摄影师数据
		写在前面 今天要抓取的网站为 https://500px.me/ ,这是一个摄影社区,在一个摄影社区里面本来应该爬取的是图片信息,可是我发现好像也没啥有意思的,忽然觉得爬取一下这个网站的摄影师更好玩一 ... 
- crawlSpider全站爬取 分布式
		# 如何提升scrapy爬取数据的效率? 推荐: 单线程加异步协程 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings.py中修改 CONCURRENT_REQU ... 
- 爬虫 crawlSpider 分布式 增量式  提高效率
		crawlSpider 作用:为了方便提取页面整个链接url,不必使用创参寻找url,通过拉链提取器,将start_urls的全部符合规则的URL地址全部取出 使用:创建文件scrapy startp ... 
- Python爬虫实例(二)使用selenium抓取斗鱼直播平台数据
		程序说明:抓取斗鱼直播平台的直播房间号及其观众人数,最后统计出某一时刻的总直播人数和总观众人数. 过程分析: 一.进入斗鱼首页http://www.douyu.com/directory/all 进入 ... 
- python爬虫---实现项目(二) 分析Ajax请求抓取数据
		这次我们来继续深入爬虫数据,有些网页通过请求的html代码不能直接拿到数据,我们所需的数据是通过ajax渲染到页面上去的,这次我们来看看如何分析ajax 我们这次所使用的网络库还是上一节的Reques ... 
随机推荐
- django 基础1
			1.web应用 本质是基于socket实现的应用程序 浏览器---------服务器 2.http协议:应用层协议 1.基于TCP协议 2.基于请求响应 3.短连接 4.无状态 请求协议 浏览器--- ... 
- Xcode添加库文件framework (转)
			首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我 ... 
- swagger 配置- ssm
			swagger 配置 - ssm swagger 是一个用来看接口的工具,具体效果如下,这里用的是swagger2 1.porm.xml <dependency> <groupId& ... 
- el获取对象属性大小写问题
			当el表达式首字母大写,会判断第二个字母大小写,小写,抛异常:大写,则直接拼接get,形成getter方法 当el表达式首字母小写,会判断第二个字母大小写,大写,必须第一个字母大写:否则无法获取值 e ... 
- VScode插件:Todo Tree
			Todo Tree 用于记录很多需要做但是暂时没办法立即做的事情,如修改样式,日期格式处理等 用法: // TODO: 流程图用canvas重构 然后,你在代码中写的TODO,会被识别出来,点击即可查 ... 
- restql 学习一 安装试用
			restql 提供了manager 可以方便配置restql 的资源,同时也提供了一个docker-compose 运行环境 以下是一个安装使用 环境准备 docker-compose 文件 ve ... 
- NOIP2013-2014提高组题目浅析
			1.前言 迎接NOIP的到来...在这段闲暇时间,决定刷刷水题.这里只是作非常简单的一些总结. 2.NOIP2014 <1> 生活大爆炸之石头剪刀布(模拟) 这是一道考你会不会编程的题目. ... 
- OI蒟蒻收集的各种网址集合(无标记
			本地收藏夹伤不起…… https://zh.wikipedia.org/wiki/Template:%E7%AE%97%E6%B3%95 https://courses.csail.mit.edu/6 ... 
- PATA1082Read Number in Chinese
			有几点需要注意的地方一是将right转化为与left在在同一节 while (left + 4 <= right) { right -= 4;//每次将right移动4位,直到left与righ ... 
- svn在cleanup 时,提示privious operation has not finished,解决方案
			在updated代码时,svn 提示 上一次操作失败,需要cleanup. 执行cleanup时,提示:cleanup失败,因为上一次操作失败,请先执行cleanup.很幽默的提示. svn的“.sv ... 
