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

美多商城项目导航帖

项目重要技术点介绍


推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
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社区 版权所有