前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫框架Scrapy(三)

爬虫框架Scrapy(三)

作者头像
小闫同学啊
发布2019-07-18 15:34:55
8840
发布2019-07-18 15:34:55
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共: 2957 字 6 图 预计阅读时间: 8 分钟

每日分享

Be the type of person you want to meet.

努力变成理想的模样。

小闫笔记

问自己一个问题『如果遇见现在的自己,你会喜欢吗?』对自己好一点,投资自己,你可以活成你想象中的任何模样。

1.知识点

1.redis中 ttl命令可以查看有效期。 expire设置有效期。

2.redis数据库高效是因为epoll,而epoll是基于Linux,所以redis中最好是在Linux中使用。

3.sha1被中国的一位女博士破解了。

4.URL地址中 %2C是逗号。

5. response.urljoin(url):对提取到的url自动补全域名,因为一般提取的url地址是相对路径。

6.scrapy_splash是scrapy的一个组件。

scrapy-splash加载js数据是基于Splash来实现的。 Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python和Lua语言实现的,基于Twisted和QT等模块构建。 使用scrapy-splash最终拿到的response相当于是在浏览器全部渲染完成以后的网页源代码。

爬虫框架Scrapy(三)

2.scrapy-redis

在前面scrapy框架中我们已经能够使用框架实现爬虫爬取网站数据,如果当前网站的数据比较庞大, 我们就需要使用分布式来更快的爬取数据

2.1.分布式是什么

简单的说分布式就是不同的节点(服务器,ip不同)共同完成一个任务。

2.2 scrapy_redis的概念

scrapy_redis是scrapy框架的基于redis的分布式组件。

2.3 scrapy_redis的作用

Scrapy_redis在scrapy的基础上实现了更多,更强大的功能,具体体现在:

通过持久化请求队列和请求的指纹集合来实现:

  • 断点续爬
  • 分布式快速抓取

2.4 scrapy_redis的流程

1.在scrapy_redis中,所有的待抓取的request对象和去重的request对象指纹都存在所有的服务器公用的redis中。

2.所有的服务器中的scrapy进程公用同一个redis中的request对象的队列。

3.所有的request对象存入redis前,都会通过该redis中的request指纹集合进行判断,之前是否已经存入过。

3.在默认情况下所有的数据会保存在redis中。

2.5 scarpy_redis的分布式工作原理

1.在scrapy_redis中,所有的待抓取的对象和去重的指纹都存在公用的redis中。

2.所有的服务器公用同一redis中的请求对象的队列。

3.所有的request对象存入redis前,都会通过请求对象的指纹进行判断,之前是否已经存入过。

分布式爬虫:先完成普通爬虫,再修改为分布式爬虫。

2.6 request对象进入队列的条件

1.request的指纹不在集合中。

2.request的dont_filter为True,即不过滤。

2.7 request指纹的实现

1.请求方法。

2.排序后的请求地址。

3.排序并处理过的请求体或空字符串。

4.用hashlib.sha1()对以上内容进行加密。

2.8 scarpy_redis实现增量式爬虫、布式爬虫

1.对setting进行如下设置:

代码语言:javascript
复制
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400,}
REDIS_URL = "redis://127.0.0.1:6379" # 请正确配置REDIS_URL

2.爬虫文件中的爬虫类继承RedisSpider类。

3.爬虫类中rediskey替代了starturls。

4.启动方式不同。

通过 scrapy crawl spider启动爬虫后,向rediskey放入一个或多个起始url(lpush或rpush都可以),才能够让scrapyredis爬虫运行。

5.除了以上差异点以外,scrapy_redis爬虫和scrapy爬虫的使用方法都是一样的。

2.9案例

京东图书实现步骤

1.修改起始的url地址,检查允许的域;

2.定义item字段;

3.解析相应数据;

4.图书分类页面中只能解析大分类、小分类以及对应的URL;

5.发送请求,进入小分类对应的图书列表页面,获取图书基本信息;

6.提取价格信息https://p.3.cn/prices/mgets?skuIds=J_11757834。

总结

1.每个页面能解析出多少数据,在对应的解析函数中实现数据提取,作为meta参数传递给下个解析函数。

2.页面中有的数据,源码中没有,比如价格,全局搜索关键字,根据关键字找到对应js文件。

3.允许的域,在解析不同页面时,必须要注意允许的域名是否发生改变。

3.爬虫部署

3.1 scrapyd的安装

scrapyd服务: pip install scrapyd

scrapyd客户端: pip install scrapyd-client

3.2 启动scrapyd服务

1.在scrapy项目路径下 启动scrapyd的命令: sudo scrapydscrapyd

2.启动之后就可以打开本地运行的scrapyd,浏览器中访问本地6800端口可以查看scrapyd的监控界面。

3.点击job可以查看任务监控界面。

3.3 scrapy项目部署

3.3.1 配置需要部署的项目

编辑需要部署的项目的scrapy.cfg文件(需要将哪一个爬虫部署到scrapyd中,就配置该项目的该文件)

代码语言:javascript
复制
[deploy:部署名(部署名可以自行定义)]
 url = http://localhost:6800/
 project = 项目名(创建爬虫项目时使用的名称)
3.3.2 部署项目到scrapyd

同样在scrapy项目路径下执行:

代码语言:javascript
复制
scrapyd-deploy -p 项目名称
3.3.3 管理scrapy项目

启动项目:

代码语言:javascript
复制
curl http://localhost:6800/schedule.json -d project=project_name -d spider=spider_name

关闭爬虫:

代码语言:javascript
复制
curl http://localhost:6800/cancel.json -d project=project_name -d job=jobid

4.Fiddler

Fiddler可以抓取移动端的包。

虽然谷歌浏览器可以模拟移动端,但是某些网站或者某些应用pc端不好抓取数据,就可以使用此应用。 cs 客户端/ 服务器模式 bs 浏览器/服务器模式

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 1.知识点
  • 爬虫框架Scrapy(三)
    • 2.scrapy-redis
      • 2.1.分布式是什么
      • 2.2 scrapy_redis的概念
      • 2.3 scrapy_redis的作用
      • 2.4 scrapy_redis的流程
      • 2.5 scarpy_redis的分布式工作原理
      • 2.6 request对象进入队列的条件
      • 2.7 request指纹的实现
      • 2.8 scarpy_redis实现增量式爬虫、布式爬虫
      • 2.9案例
    • 3.爬虫部署
      • 3.1 scrapyd的安装
      • 3.2 启动scrapyd服务
      • 3.3 scrapy项目部署
    • 4.Fiddler
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档