实属课程需要,不然早就放弃在半路了。维持了断续半个多月的 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. PAT 甲级 1043 Is It a Binary Search Tree (25 分)(链表建树前序后序遍历)*不会用链表建树 *看不懂题

    1043 Is It a Binary Search Tree (25 分)   A Binary Search Tree (BST) is recursively defined as a bina ...

  2. 微信小程序--TabBar不出现

    今天打算开始实战一个微信小程序项目,一开始就踩坑了,正确设置了TabBar,但是TabBar就是不能显示出来,后面才找到原因,这里记录下: app.json正确代码: { "pages&qu ...

  3. Zabbix之设置监控主机某个端口并发送邮件告警

    Zabbix可以配置监控主机的某个端口在该端口down之后触发发送告警邮件 一,添加监控项 选择主机 监控项 创建监控项 查看监控图形 二,设置触发器 设置触发器当该监控的端口down时可以发送告警 ...

  4. xcode出现the file couldn't be opened怎么解决

    右键——show In finder——显示xcode包内容——将有数字的删除——把有用的xcode双击

  5. idea自动下载依赖的源代码等信息

    mvn dependency:sources -DdownloadSources=true -DdownloadJavadocs=true

  6. Vidual Studio vs2013彻底卸载

    我的win10 1803 2019年年中升级的,非常后悔,持续不间断的假死状态让人很无奈.又不舍得回退,因为很多保存的隐藏数据. 开始清理系统吧,东西越少性能越好,于是电脑就成了纯净版,甚至连 看到了 ...

  7. 怎么通过外网来访问自己在Tomcat服务器中配置的项目

    目前还没有试验过 https://blog.csdn.net/qingyisuo/article/details/80086105

  8. nginx 工作原理总结

    1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...

  9. JS的BOM操作语法

    整理了一下JS的BOM操作语法,这里记录一下. <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...

  10. java基础--Java虚拟机

    ·JVM (Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java 最具吸引力的特性之一.我们编写的Java ...