热门标签 | 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相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍


推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 在API测试中,我们常常需要通过大量不同的数据集(包括正常和异常情况)来验证同一个接口。如果为每种场景单独编写测试用例,不仅繁琐而且效率低下。采用数据驱动的方式可以有效简化这一过程。本文将详细介绍如何利用CSV文件进行数据驱动的API测试。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
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社区 版权所有