快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → python 分布式爬虫

python 分布式爬虫

时间:2022-10-06 17:56:36人气:作者:快盘下载我要评论

分布式爬虫

什么分布式 分布式就是把一个系统拆分成若干个子系统, 每个子系统独立运行, 然后通过某种方式进行交互.什么是分布式爬虫 狭义地讲, 需要将爬虫的多个组件拆分成子系统. 但是现在主流是只拆分出任务生产者, 建立一个生产消费者模型.由多台机器上的爬虫实例作为消费者去完成爬虫任务.

scrapy的痛点

爬虫实例中断后重启后, 内存保存的消息队列将会丢失, 实现爬虫重启功能比较复杂;去重中间件无法持久化, 中断后无法正常过滤;消息队列放在了内置类型QUEUE中, 无法简单地从外部查看;不共享消息队列, 可扩展性差;

scrapy-redis

https://github.com/rmax/scrapy-redis

安装

pip install scrapy-redis

SETTINGS设置

SCHEDULER

更换调度器

SCHEDULER = 'scrapy_redis.scheduler.Scheduler'

SCHEDULER_QUEUE_CLASS

更换消息队列

SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'

DUPEFILTER_CLASS

更换过滤器, 将请求指纹保存在redis当中

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

SCHEDULER_PERSIST

消息队列持久化, 不会清空redis中的消息队列

SCHEDULER_PERSIST = True

REDIS配置

# Redis settings
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
# Redis 参数配置
REDIS_PARAMS = {"db": 5}

SPIDER设置

修改继承的父类为scrapy_redis.spiders.RedisSpider

from scrapy_redis.spiders import RedisSpider

class JdSearch(RedisSpider):

添加redis_key配置

redis_key = f"{name}:start_urls"

将生产者从scrapy项目中拆分出去

import redis
import time
import json

redis_con = redis.Redis(host='localhost', port=6379, db=5)


def search_producer():
    for keyword in ["鼠标", "键盘", "显卡", "耳机"]:
        for page_num in range(1, 11):
            url = f"http://218.206.242.148:12345/images/20_tencent/20221006/abthhyyy4h0
            meta = {
                "sta_date": time.strftime("%Y-%m-%d"),
                "keyword": keyword,
                "page_num": page_num
            }

            task = json.dumps({
                "url": url,
                "body": '',
                "method": "GET",
                "meta": meta
            })
            redis_con.lpush("jd_search:start_urls", task)


if __name__ == "__main__":
    search_producer()

重写start_requests

    def make_request_from_data(self, data):
        task = json.loads(data.decode("utf-8"))
        return scrapy.http.FormRequest(url=task['url'],
                                       formdata=json.loads(task['body']) if task['body'] else '',
                                       method=task['method'],
                                       meta=task['meta'],
                                       dont_filter=False,
                                       callback=self.parse_search,
                                       errback=self.process_error)

相关文章

  • Scrapy安装教程(图文)

    Scrapy安装教程(图文),一、直接下载 在“开始”里面输入“cmd”进入命令提示符窗口,然后输入pip install scrapy看看下载是否成功 ...
  • GBase-8c-分布式高可用

    GBase-8c-分布式高可用,在部署上,DN节点每个高可用组采用主从备份的方式,可以部署单主、一主一从以及一主多从的部署方式均可,主从之间可以配置为同步的备份方式也可以配置为异步的备份方式,也可以在一个高可用组内同时存在同步和异步的节点,一般同机房同城的节点之间采用同步的备份方式,异地的节点之间采用异步的备份方式。在部署上,CN多个节点完全对等的部署方式,每个节点在同一时间对外都提供相同的数据库视图,所以我们的CN节点高可用可以根据实际的业务需求,部署1个或多个都可以,多个CN节点可以部署在同机房、同城...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。