实属课程需要,不然早就放弃在半路了。维持了断续半个多月的 bug 调试,突然就实现了。很是欣慰。网上关于分布式爬虫的都是一些介绍,实战的不多并且都很相似,说的云来雾去的,只是项目的流程。可能是项目一路顺风,而我 bug 不断。也好 记录下来供大家参考。

关于 scrapy-redis 环境配置 以及框架流程就不进行叙述了。网上也是一大堆的内容。

主要内容有:

1. 如何去写一个分布式爬虫

首先创建一个普通的爬虫,在保证此爬虫能正常运行的基础上进行修改,然后成为分布式爬虫。我的项目是在linux上 redis 数据库存储分配 requests,我写的是 bilibili 评论抓取,项目路径如下:

a. 将 spiders --> bilibili.py 继承类 由 scrapy.Spider 改为 RedisSpider 。

注释掉: "allowed_domains"  "start_urls"
添加: redis_key = 'bilibili:start_urls'

b. setting.py 修改

# redis 数据库连接参数
REDIS_HOST = '远程 ip' # windows setting
# REDIS_HOST = 'localhost' # linux setting
REDIS_PORT = 6379
REDIS_PARAMS = {
'password': '' # redis 数据库设置密码情况下进行设置
} # 指定使用 scrapy-redis 的调度器
SCHEDULER = 'scrapy_redis.scheduler.Scheduler' # 指定使用 scrapy-redis 的去重机制
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' # 指定排序爬取地址时的队列
# 使用先进先出(FIFO)排序
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue' # 设置断点续传
SCHEDULER_PERSIST = False DOWNLOADER_MIDDLEWARES = {
  'spider_parallel.middlewares.SpiderParallelDownloaderMiddleware': 543,
} ITEM_PIPELINES = {
'spider_parallel.pipelines.SpiderParallelPipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 400
}

2. 运行爬虫的顺序《此坑最深》

a. 先进入 linux 中 redis 数据库

redis-cli
auth 123456

b. 服务器端运行spider:

scrapy crawl bilibili

这时看到程序一直在等待 redis 中插入 start_url

c. redis 命令行中执行:

lpush bilibili:start_urls https://api.bilibili.com/x/v2/reply?pn=1&type=1&oid=329437&sort=2

此连接即评论包的地址,oid 为视频 av 号。你问我怎么知道的这个地址??? 爬虫基础在看看吧。(网页 F12 加载的内容中查找)

d. windows 中运行 spider:

scrapy crawl bilibili

顺序不对其中一个会一直处于等待监听的状态。还有就是我想让 两个spiders-->bilibili 中的 name 值不同,以此区分不同的评论是哪个爬虫抓取的。不行,一定要相同。我的区分就是服务器端爬虫存储在服务器端的mongodb数据库中,windows中爬虫就存储在windows中的mongodb数据库中。存储在同一个数据库中也是可以的。区分时记录爬虫类,写 __init__ () 函数继承父类等内容。

没问题就可以看到两个爬虫在共同抓取执行了。

项目已上传至 git

原创不易,尊重版权。转载请注明出处:http://www.cnblogs.com/xsmile/

分布式爬虫-bilibili评论的更多相关文章

  1. 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

    第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...

  2. 【文智背后的奥秘】系列篇——分布式爬虫之WebKit

    版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/139 来源:腾云阁 https://www.qclou ...

  3. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  4. Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...

  5. Python分布式爬虫必学框架Scrapy打造搜索引擎 学习教程

    Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 1.创建搜索自动补全字段suggest自动补全需要用 ...

  6. scrapy补充-分布式爬虫

    spiders 介绍:在项目中是创建爬虫程序的py文件 #1.Spiders是由一系列类(定义了一个网址或一组网址将被爬取)组成,具体包括如何执行爬取任务并且如何从页面中提取结构化的数据. #2.换句 ...

  7. 基于java的分布式爬虫

    分类 分布式网络爬虫包含多个爬虫,每个爬虫需要完成的任务和单个的爬行器类似,它们从互联网上下载网页,并把网页保存在本地的磁盘,从中抽取URL并沿着这些URL的指向继续爬行.由于并行爬行器需要分割下载任 ...

  8. Python分布式爬虫原理

    转载 permike 原文 Python分布式爬虫原理 首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作 ...

  9. Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs)

    Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs) Cola:一个分布式爬虫框架 发布时间:2013-06-17 14:58:27, 关注:+2034, 赞美: ...

随机推荐

  1. ElasticSearch——原始文档和倒排索引

    一.原始文档 如上图所示, 第二象限是一份原始文档,有title和content2个字段,字段取值分别为”我是中国人”和” 热爱共X产党”,这一点没什么可解释的.我们把原始文档写入Elasticsea ...

  2. python 日志组件

    日志组件: import logging import logging.handlers import os class logs(object): def __init__(self): self. ...

  3. jenkins的pipeline拉取指定分支的代码

    脚本示例 pipeline { agent any options { durabilityHint 'PERFORMANCE_OPTIMIZED' timeout(time:5, unit: 'MI ...

  4. 【Kail 学习笔记】Dmitry信息收集工具

    DMitry(Deepmagic Information Gathering Tool)是一个一体化的信息收集工具.它可以用来收集以下信息: 根据IP(或域名)来查询目标主机的Whois信息 在Net ...

  5. OWASP TOP 10(OWASP十大应用安全风险)

    TOP1-注入 当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生注入漏洞,例如SQL,NoSQL,OS,LDAP注入(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种 ...

  6. 帝国cms 批量替换语句

    UPDATE www_92game_net_cnys_ecms_caipu SET titlepic=REPLACE(titlepic,'http://file.92game.net', '') ; ...

  7. jQuery禁用input历史选择

    $("#id").attr("autocomplete", "off");

  8. [转帖]如何禁止VirtualBox虚拟机和物理机之间的时间同步

    如何禁止VirtualBox虚拟机和物理机之间的时间同步 乐者为王 2014-11-02 706 阅读   http://ju.outofmemory.cn/entry/97301 验证了下 修改注册 ...

  9. WCF-简单 配置文件

    一.服务端配置文件 主要包括 1.services 配置服务节点 <!--name 指的是契约实现类--> <service name="WcfLib.User2" ...

  10. 【最后一战】NOI2019游记

    NOI2019 游记 报到日 -1 打了一场LOJ发现rk5,听完cy讲T1后感觉自己非常智障--AK的那位老哥好强啊qwq 窝在宾馆里打打游戏敲敲板子 饥荒真好玩 等着明天去报道 要退役了反而心情平 ...