爬虫日常笔记12

RedisSpider

继承自父类为RedisSpider
增加了一个redis_key的键,没有start_urls,因为分布式中,如果每台电脑都请求一次start_url就会重复
多了__init__方法,该方法不是必须的,可以手动指定allow_domains

爬虫 创建爬虫

scrapy genspider dangdang dangdang.com

  • 修改

引入父类
from scrapy_redis.spiders import RedisSpider

修改父类
class DangdangSpider(RedisSpider):

修改starr_urls为redis_key
start_urls = [‘http://book.dangdang.com/’]
redis_key = “dangdang”

爬虫运行

测试阶段 每次都需要清空redis
flushdb

每次给redis_key添加start_url
lpush dangdang http://book.dangdang.com/

运行爬虫
scrapy crawl dangdang

注意点

在方法parse_book_list中 yield item的时候需要deepcopy
因为一个item for循环多次赋值

yield deepcopy(item)

分布式演示

可以用两台机器 你自己的 和同桌

本地开启两个或多个爬虫

断点续爬

请求队列有很多请求 scrapy爬取了一半 突然挂掉了
再启动一个scrapy 会接着上一次请求挂掉的地方 继续请求

增量式

增量式爬虫 只获取新增加的数据

首先我们要把对放网站的数据全部过到 对方有新增加了一些数据
然后只爬去新增加的内容

三个父类的分析

  • 配置

去重的持久化
DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFPDupeFilter”

调度器 请求队列的持久化
SCHEDULER = “scrapy_redis.scheduler.Scheduler”

以上连个配置实现了 请求队列的分布式

  • Spider

scrapy.Spider有的功能这个类都有

  • Crawl

通过rules中的正则表达式或者xpath提取url

  • Redis

添加了redis_key 使start_url实现了分布式

爬虫 创建爬虫

创建爬虫
scrapy genspider -t crawl amazon amazon.cn

引入父类ReidsCrawlSpider
from scrapy_redis.spiders import RedisCrawlSpider

修改父类
class AmazonSpider(RedisCrawlSpider):

修改start_urls为redis_key
start_urls = [‘https://www.amazon.cn/图书/b/ref=sd_allcat_books_l1?ie=UTF8&node=658390051’]
redis_key = “amazon”

定时执行任务

linux crontab
windows 计划任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值