scrapy 分布式爬虫- RedisSpider

爬去当当书籍信息

多台机器同时爬取,共用一个redis记录 scrapy_redis

带爬取的request对象储存在redis中,每台机器读取request对象并删除记录,经行爬取。实现分布式爬虫

import scrapy
from scrapy_redis.spiders import RedisSpider
from copy import deepcopyclass DangdangSpider(RedisSpider):name = 'dangdang'allowed_domains = ['dangdang.com']# 开始爬虫,会从redis的key中读取start_url.redis_key = "dangdang" # lpush dangdang 'http://book.dangdang.com/'def parse(self, response):# 大分类div_list = response.xpath("//div[@class='con flq_body']/div")[:-4]print(len(div_list), 'duoshao')for div in div_list:item = {}item['b_cate'] = div.xpath("./dl/dt//text()").extract()item['b_cate'] = [i.strip() for i in item['b_cate'] if len(i.strip())>0] # 过滤掉空字符print('b_cate:', item['b_cate'])# 中间分类if item['b_cate'] == ['创意文具']:print(item['b_cate'], "pass......")item['m_cate'] = Noneitem['s_cate_url'] = div.xpath("./dl/dt/a/@ddt-src").extract_first()print('s_cate_url:', item['m_cate'])# yield scrapy.Request(#     item['s_cate_url'],#     callback=self.parse_special,#     meta={'item': deepcopy(item)}# )else:dl_list = div.xpath(".//dl[@class='inner_dl']")for dl in dl_list:item['m_cate'] = dl.xpath("./dt//text()").extract()item['m_cate'] = [i.strip() for i in item['m_cate'] if len(i.strip())>0]# 小分类dd_list = dl.xpath("./dd")for dd in dd_list:item['s_cate'] = dd.xpath("./a/@title").extract_first()item['s_cate_url'] = dd.xpath("./a/@ddt-src").extract_first()# 小分类的所有书籍if item['s_cate_url'] is not None:yield scrapy.Request(item['s_cate_url'],callback=self.parse_books,meta={'item': deepcopy(item)})def parse_special(self, response):''' 文具信息 '''passdef parse_books(self, response):item = response.meta['item']# 当前小分类的书籍li_list = response.xpath("//ul[@class='list_aa ']/li")if li_list is not None:for li in li_list:try:item['book_price'] = li.xpath(".//span[@class='num']/text()").extract_first() + \li.xpath(".//span[@class='tail']/text()").extract_first()except:item['book_price'] = 'Unknown'item['book_url'] = li.xpath("./a/@href").extract_first()if item['book_url'] is not None:yield scrapy.Request(item['book_url'],callback=self.parse_book_detail,meta={'item': deepcopy(item)})def parse_book_detail(self, response):item = response.meta['item']item['book_name'] = response.xpath("//div[@class='name_info']/h1/img/text()").extract_first()item['book_desc'] = response.xpath("//span[@class='head_title_name']/text()").extract_first()# 这一本书籍的详细信息span_list = response.xpath("//div[@class='messbox_info']/span")item['book_author'] = span_list.xpath("./span[1]/a/text()").extract() # 可能多个作者item['publisher'] = span_list.xpath("./span[2]/a/text()").extract_first()item['pub_date'] = span_list.xpath("./span[3]/text()").extract_first()print(item)# yield item

posted on 2019-05-10 16:27 .Tang 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/tangpg/p/10845174.html

scrapy 分布式爬虫- RedisSpider相关推荐

  1. Scrapy分布式爬虫打造搜索引擎 - (三)知乎网问题和答案爬取

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 推荐前往我的个人博客进行阅读:http://blog.mtiany ...

  2. scrapy分布式爬虫原理(scrapy_redis)

    scrapy分布式爬虫及scrapy_redis 分布式原理 scrapy--redis实现分布式 scrapy_redis源码 分布式原理 在学习完scrapy基本知识后,大多数爬虫应用了scrap ...

  3. scrapy分布式爬虫爬取淘车网

    一.master主机配置 1.开启redis服务器 2.city.py#文件 # 城市编码 CITY_CODE = ['shijiazhuang', 'tangshan', 'qinhuangdao' ...

  4. [235]scrapy分布式爬虫scrapy-redis(二)

    ===============================================================Scrapy-Redis分布式爬虫框架================== ...

  5. scrapy分布式爬虫案例

    关于 Redis Redis 是目前公认的速度最快的基于内存的键值对数据库 Redis 作为临时数据的缓存区,可以充分利用内存的高速读写能力大大提高爬虫爬取效率. 关于 scrapy-redis sc ...

  6. 基于Scrapy分布式爬虫的开发与设计

    个人博客请访问http://blog.xhzyxed.cn 这个项目也是初窥python爬虫的一个项目,也是我的毕业设计,当时选题的时候,发现大多数人选择的都是网站类,实在是普通不过了,都是一些简单的 ...

  7. python分布式爬虫框架_python之简单Scrapy分布式爬虫的实现

    分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度. 在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queu ...

  8. 三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题 转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182813.html

  9. python爬虫-初步使用Scrapy分布式爬虫(爬取mcbbs整合包保存名称及主要mod),大爱MC

    首先介绍一下scrapy. Scrapy一个开源和协作的框架,是为了页面抓取所设计的,使用它可以快速.简单.可扩展(通过中间件)的方式从网站中提取所需的数据. 工作流程如下 Scrapy Engine ...

最新文章

  1. Linux 虚拟内存和物理内存的理解【转】
  2. oracle交流 提问,Oracle常见提问5(转)
  3. Leetcode114二叉树转链表-树中修改
  4. 【网络安全】记一次接口加密测试
  5. u盘添加veket linux,veket要怎样才能安在u盘上?
  6. Java 字符串,byte[],16进制的字符串互转
  7. 进程间通信之信号he信号量
  8. W ndows找不到explorer,windows找不到explorer.exe的处理教程
  9. Linux自学笔记——tcp wrapper
  10. 用同一个文件流读取同一个文件两次所需要做的操作
  11. handlersocket mysql_Mysql插件之HandlerSocket的安装、配置、使用
  12. nagios——短讯报警
  13. Dell电脑搭配Win10休眠 = 黑屏
  14. Unity-黑暗之魂复刻-翻滚、后跳功能
  15. 【开学季】30款高质量的自学网站,总有一款适合你
  16. 问卷调查有哪些作用?
  17. 基于Java+Swing实现聊天室
  18. android手机扇区数据读写,磁盘、SD卡、移动磁盘物理扇区读写
  19. c语言错误c1010怎么办,fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h...
  20. 深入浅出数据分析读书笔记

热门文章

  1. vc的速度有c语言快吗,大家帮看看,怎么回事?Delphi竟比vc++还快
  2. 水域大小 Java_水域大小
  3. kafka教程视频百度网盘下载,聊一聊-MySQL-数据库中的那些锁
  4. java线程锁的作用,大厂面经合集
  5. 机器学习(MACHINE LEARNING)交叉验证(简单交叉验证、k折交叉验证、留一法)
  6. 计算机仿真实训操作开车步骤,仿真实训系统解决方案
  7. abovedisplayskip无效_latex减少图片和图片解释文字之间的距离、调整公式与正文间距离,调整空白大小:...
  8. python ansible_Ansible Python API | linux系统运维
  9. 计网链路层mac地址和ip地址缺一不可
  10. 企业网络推广方法浅析如何提高网站的点击率和访问量呢?