对Python爬虫如何实现大批量爬取感兴趣的读者可以看下scrapy爬虫框架,并且使用本文的scrapy-redis将你的爬虫升级为分布式爬虫。
阅读本文章,您需要:
提示:本文为快速上手文章,有些操作的具体步骤不详细讲,自行百度通用解法,省略的部分我认为你可以自行解决,如果遇到问题,请留言提问
提示:请注意版本问题,不要过低。
image
添加如下代码:
# scrapy-redis
REDIS_URL = 'redis://:yzd@127.0.0.1:6379' # for master
# REDIS_URL = 'redis://:yzd@10.140.0.2:6379' # for slave (master's ip)
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
对于itempipeline:你以前怎么存的数据还是怎么存,当然你也可以用redis先存,之后再一起转移出来。像我就直接存到mysql了
ITEM_PIPELINES = {
# 'JD.pipelines.JdPipeline': 300,
# 'scrapy_redis.pipelines.RedisPipeline': 400,
'JD.mysqlpipelines.pipelines.JDPipeline': 300,
}
将继承改为继承Redisspider
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import scrapy
from JD.items import JdItem
import logging
from scrapy_redis.spiders import RedisSpider
import time
# class JDcat(scrapy.Spider):
class JDcat(RedisSpider):
name = "JDcate"
allowed_domains = ["jd.com"]
# scrapy-redis
redis_key = "JDcate:JD_urls"
def start_requests(self):
# designed by yourself
# yield scrapy.Request(url=url, callback=self.parse)
pass
def parse(self, response):
# designed by yourself
pass
如果你想要让slave抓取到的数据直接存入master的数据库,您别忘了修改slave的数据库连接设置
# for master
db_item = pymysql.connect(host="localhost", user="root", password="root",
db="pricemonitor", port=3306, charset='utf8')
# for slave
# db_item = pymysql.connect(host="10.140.0.2", user="root", password="root",
# db="pricemonitor", port=3306, charset='utf8')
启动master:scrapy crawl xxxxx 启动slave: crawl xxxxx
image2
上传了个demo源码,供大家修改使用: https://github.com/qqxx6661/scrapy_redis_demo
有问题请留言或邮件yangzd1993@foxmail.com
https://www.cnblogs.com/zjl6/p/6742673.html scrapy-redis官方文档
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有