环境 ArchLinux Pycharm
一、安装scrapy_redis
1 | cd py |
二、启动Redis、Mongodb服务
1 | sudo systemctl start mongondb.service |
三、修改爬虫文件
让爬虫文件继承父类RedisSpide并添加redis_key = ‘blogspider’1
2
3
4
5
6class BlogSpiderSpider(RedisSpider):
name = 'blog_spider'
allowed_domains = ['www.kingname.info']
redis_key = 'blogspider'
start_urls = ['http://www.kingname.info/archives/']
host='http://www.kingname.info'
四、 修改设置
在设置(settings.py)里面添加
1
2
3
4
51. SCHEDULER = "scrapy_redis.scheduler.Scheduler" #启动调度员Scheduler
2. DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 去重
3. SCHEDULER_PERSIST = True # 不清理Redis队列
4. SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue" #设置优先级队列
<爬虫的请求算法有三种:队列、栈、优先级队列>
五、设置Redis地址端口(远程使用)在settiings.py
REDIS_HOST= ‘127.0.0.1’
REDIS_PORT = 6379
六、控制台打印Crawled 0 pages,scrapyed 0 item 导致爬不到数据
- 这是由于使用了RedisScrapy作为父类以后 ,爬虫会直接监控Redis中的数据,并不读取start_urls中的数据。所以Redis现在是空的,爬虫处于等待状态:
处理办法:
在main.py中初始化Redis爬虫地址:1
2
3
4
5from scrapy import cmdline
import redis
url = redis.StrictRedis(host='127.0.0.1')
url.lpush('blogspider','http://www.kingname.info/archives/')
cmdline.execute("scrapy crawl blog_spider".split())