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

美多商城项目导航帖

项目重要技术点介绍


推荐阅读
  • 本文介绍了在Windows系统下安装Python、setuptools、pip和virtualenv的步骤,以及安装过程中需要注意的事项。详细介绍了Python2.7.4和Python3.3.2的安装路径,以及如何使用easy_install安装setuptools。同时提醒用户在安装完setuptools后,需要继续安装pip,并注意不要将Python的目录添加到系统的环境变量中。最后,还介绍了通过下载ez_setup.py来安装setuptools的方法。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
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社区 版权所有