热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爬虫框架Scrapy(三)

正文共:2957字6图预计阅读时间:8分钟每日分享Bethetypeofpersonyouwanttomeet.努力变成理想的模样。小闫笔记࿱

正文共: 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进行如下设置:

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 scrapyd 或 scrapyd

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

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

3.3 scrapy项目部署

3.3.1 配置需要部署的项目

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

[deploy:部署名(部署名可以自行定义)]url = http://localhost:6800/project = 项目名(创建爬虫项目时使用的名称)

3.3.2 部署项目到scrapyd

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

scrapyd-deploy -p 项目名称

3.3.3 管理scrapy项目

启动项目:

curl http://localhost:6800/schedule.json -d project=project_name -d spider=spider_name

关闭爬虫:

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相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍


推荐阅读
  • 导读上一篇讲了zsh的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf的使用等等。其中很多内容没有必要记忆,作为手册参 ... [详细]
  • 本文介绍了如何在三台CentOS 7.5虚拟机上通过Docker部署RabbitMQ集群,包括环境准备、容器创建、集群配置及故障处理等内容。 ... [详细]
  • 转载网址:http:www.open-open.comlibviewopen1326597582452.html参考资料:http:www.cocos2d-ip ... [详细]
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 本文介绍了如何在 Linux 系统上构建网络路由器,特别关注于使用 Zebra 软件实现动态路由功能。通过具体的案例,展示了如何配置 RIP 和 OSPF 协议,以及如何利用多路由器查看工具(MRLG)监控网络状态。 ... [详细]
  • grep、sed、awk一、grep的用法1、grep简介grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep包 ... [详细]
  • OpenWrt 是一款高度可定制的嵌入式 Linux 发行版,广泛应用于无线路由器等领域,拥有超过百个预装软件包。本文详细探讨如何在 OpenWrt 上通过 Luci 构建自定义模块,以扩展其功能。 ... [详细]
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • Kodi(原名XBMC)是一款由XBMC基金会开发的免费开源媒体播放器应用,支持多种操作系统和硬件平台。该软件以其强大的多媒体处理能力和用户友好的界面受到广泛欢迎。 ... [详细]
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 本文详细介绍了RPM包构建过程中Spec文件的结构和各部分的作用,包括包描述、准备阶段、构建过程、安装步骤、清理操作以及文件列表等关键环节。同时,提供了关于RPM宏命令、打包目录结构及常见标签的深入解析。 ... [详细]
  • Iris 开发环境配置指南 (最新 Go & IntelliJ IDEA & Iris V12)
    本指南详细介绍了如何在最新的 Go 语言环境及 IntelliJ IDEA 中配置 Iris V12 框架,适合初学者和有经验的开发者。文章提供了详细的步骤说明和示例代码,帮助读者快速搭建开发环境。 ... [详细]
  • Vue中从后端获取JSON字符串的方法
    本文详细探讨了如何在Vue项目中从后端获取JSON字符串,并将其正确解析和显示,对于开发者来说具有较高的实用性和参考价值。 ... [详细]
  • 深入解析Pytest Fixture与Conftest的高级应用
    本文详细探讨了Pytest中的Fixture机制及其在conftest.py文件中的全局配置应用,涵盖Fixture的基本概念、定义、多种使用场景以及作用域等内容,适合希望深入了解Pytest测试框架的开发者。 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
author-avatar
张程Louis
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有