实属课程需要,不然早就放弃在半路了。维持了断续半个多月的 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. jQuery BlockUI Plugin Demo 4(Element Blocking Examples)

    Element Blocking Examples This page demonstrates how to block selected elements on the page rather t ...

  2. maven中央仓库的配置在哪里?superpom是什么?中央仓库查找三方包

    maven的superpom 每个项目都默认继承的pom 位置 $M2_HOME/lib/maven-model-builder.jar 使用tar -xvf解压后,grep -r central 搜 ...

  3. 安卓 adb命令

    获取包名 aapt d badging C:\Users\600844\Desktop\beijingtoon.apk "package launchable-activity" ...

  4. 白嫖百度 Tesla V100 笔记(在 AI Studio 上使用 tensorflow 和 pytorch 的方法)

    登陆百度 AI Studio 并按照教程创建新项目 启动项目并进入控制台 下载 Anaconda3/Miniconda3 安装脚本 安装在 ~/work/*conda3 目录 输入命令 source ...

  5. JS通过ActiveX读写ini配置文件

    String.prototype.trim = function(){ return this.replace(/(^\s+)|(\s+$)/g, ''); }; IniConfig = functi ...

  6. 第一周006------Java 三大版本含义——Java ME和安卓开发的关系

    Java ME 和安卓开发没有任何关系 Java  SE(Java Standard Edition):标准版,定位在个人计算机的应用(桌面系统 QQ  游戏)Java  EE(Java Enterp ...

  7. 如何保持人际关系zz

    作者:Faaany链接:https://www.zhihu.com/question/35590289/answer/63675007来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  8. Scratch:海龟绘图(九)

    在本课的前导部分,我们说到怎么做才能成为一个负责任的“程序猿”.我认为,负责任的程序员决不会草率的处理任何“函数接口”. 比如这个“画圆”函数,程序员就会认真推敲“哪些参数是必要的.哪些参数又是多余的 ...

  9. 项目element-ui checkbox里面获取选中项 实现批量删除 修改

    <el-table :data="tableData" stripe border style="width: 100%" @selection-chan ...

  10. 列表初始化(list initialization)

    列表初始化啊就是大括号来初始化: 列表初始化的好处: