正文共: 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相关知识点回顾
美多商城项目导航帖
项目重要技术点介绍