scrapy版本:1.5.1
scrapy-redis版本:0.6.8
redis版本:2.10.6
scrapy_redis的git:https://github.com/rmax/scrapy-redis
该项目的git:https://github.com/MsLpoi/sr_demo
先吐槽一下,网上关于scrapy_redis的教程真是少啊,而且还是片言片语的。官网那个example还是用dmoz那个网站做例子的,大佬啊那网站早就403了。学这个库的时候真的是苦了我了...好了不说废话,先上一幅简单的分布式爬虫系统设计图。这系列文章也是按照这图来写的,虽然简单,但是用来入门的话足够了。
- 主爬虫:用来抓取链接,并保存链接到redis数据库。这些链接将会被从爬虫使用。
- redis数据库:用于保存链接,这里将使用python中的redis库和scrapy_redis库来操作redis数据库。
- 从爬虫:将会访问主爬虫保存到redis数据库中的链接,并根据个人需求获取数据。
这里打算先讲了主爬虫的写法,这里用了一个财经资讯网站作为例子。下一篇才会讲从爬虫的写法。由于另一台电脑坏了,这里打算将主爬虫、redis数据库和从爬虫都放在同一台电脑内测试。如果硬件条件满足的话,大家可以试试两台不同电脑分别布置主爬虫和从爬虫,记得自行修改IP就好了...
注:默认你已懂得scrapy的基本使用方法,不再赘述。
1. 准备
- Window 10(ubuntu操作是一样的)
- python 3.7.0
- redis x64 3.2.100(下载安装及其使用参考 http://www.redis.cn/ 或 https://redis.io/)
2. 开始
首先你要安装以下python库
pip install scrapy
pip install scrapy_redis
pip install redis
并通过以下命令创建一个名为sr_demo的scrapy项目之后,我们就开始吧!
scrapy startproject sr_demo
1. setting.py
自行修改里面的USER_AGENT、ROBOTSTXT_OBEY等防BAN设置。
2. get_urls.py
在sr_demo项目下使用以下命令创建一个新的爬虫
scrapy genspider -t basic get_urls news.stcn.com
并在该文件输入以下代码
# -*- coding: utf-8 -*-
import scrapy
import redis
class GeturlsSpider(scrapy.Spider):
name = 'get_urls'
allowed_domains = ['news.stcn.com/']
start_urls = ['http://news.stcn.com/']
def parse(self, response):
res = response.xpath('//ul[@class="news_list"]/li')
r = redis.Redis(host='localhost', port=6379)
for eh in res:
r.lpush('read_urls:start_urls', eh.xpath('./p[@class="tit"]/a/@href').extract_first())
3. 运行
通过以下命令运行get_urls爬虫,并查看数据库,你会看到有一个名为read_urls:start_urls的列表被保存在redis数据库中了,里面的元素全都是字符串形式的网址,这些就是从爬虫要抓取数据的链接啦。至此准备工作就已经完成了~
scrapy crawl get_urls
第一篇因为只是准备工作,并没有讲到scrapy_redis,所以就这么简单好了,接下来的是重头戏~