scrapy-redis记录,重写make_request_from_data和make_requests_from_url
起因是最近爬了某电商商品,因为用了scrapy-redis来爬,这样可以停机,重新爬,但是单机版有start_requests方法,然而,我的start_url是保存在redis服务器中的,需要从redis接收第一条url那么start_requests方法就不合适。
经过搜索和大佬的经验,重写了make_request_from_data和make_requests_from_url实现了redis中接收start_url。
先看下我使用的机器(树莓派和PC)。发现用了redis之后简直爽歪歪,段时间内不担心重爬等糟心事情。可以断开,树莓派不关机,自动保存items到本地中,爬完之后,我在从reids存到mysql中。
scrapy-redis关键源代码
首先,代码中要继承RedisSpider。
from scrapy_redis.spiders import RedisSpider
class 你的爬虫类(RedisSpider):
redis_key = "computer:start_urls"
#...代码并不完整,需要自己添加
def make_request_from_data(self, data):
data = json.loads(data)
url = data.get('url')
print(url)
return self.make_requests_from_url(url)
def make_requests_from_url(self, url):
'''准备开始爬取首页数据
'''
# 第几页,每页30条信息
page = 1
# 根据销量排行爬取
keyword = ['联想(Lenovo)']
meta = {