京东分布式爬虫

# -*- coding: utf-8 -*-
import jsonimport scrapyfrom JD.items import JdItem# 1. 导入分布式爬虫
from scrapy_redis.spiders import RedisSpider# 2. 继承分布式爬虫
class BookSpider(RedisSpider):name = 'book'# 3. 注销start_url和allowed_domains# # 修改允许的域# allowed_domains = ['jd.com','p.3.cn']# # 修改起始的url# start_urls = ['https://book.jd.com/booksort.html']# 4. 设置redis_keyredis_key = 'jd_book'# 5. 设置__init__def __init__(self, *args, **kwargs):domain = kwargs.pop('domain','')self.allowed_domains = list(filter(None,domain.split(',')))super(BookSpider,self).__init__(*args,**kwargs)def parse(self, response):# 获取所有图书大分类节点列表big_node_list = response.xpath('//*[@id="booksort"]/div[2]/dl/dt/a')for big_node in big_node_list[:5]:big_category = big_node.xpath('./text()').extract_first()big_category_link = response.urljoin(big_node.xpath('./@href').extract_first())# 获取所有图书小分类节点列表small_node_list = big_node.xpath('../following-sibling::dd[1]/em/a')for small_node in small_node_list[:5]:temp = {}temp['big_category'] = big_categorytemp['big_category_link'] = big_category_linktemp['small_category'] = small_node.xpath('./text()').extract_first()temp['small_category_link'] = response.urljoin(small_node.xpath('./@href').extract_first())# 模拟点击小分类链接yield scrapy.Request(url = temp['small_category_link'],callback = self.parse_book_list,meta = {'jd_wtt':temp},)def parse_book_list(self, response):temp = response.meta['jd_wtt']book_list = response.xpath('//*[@id="plist"]/ul/li/div')for book in book_list:item = JdItem()item['big_category'] = temp['big_category']item['big_category_link'] = temp['big_category_link']item['small_category'] = temp['small_category']item['small_category_link'] = temp['small_category_link']book_name = book.xpath('./div[3]/a/em/text()|./div/div[2]/div[1]/div[3]/a/em/text()').extract_first()item['bookname'] = str(book_name).strip()item['author'] = book.xpath('./div[4]/span[1]/span/a/text()|./div/div[2]/div[1]/div[4]/span[1]/span/a/text()').extract_first()item['link'] = book.xpath('//div[1]/a/@href|./div/div[2]/div[1]/div[3]/a/@href').extract_first()# 获取图书编号skuid = book.xpath('.//@data-sku').extract_first()# 拼接图书价格地址pri_url = 'https://p.3.cn/prices/mgets?skuIds=J_' + skuidyield scrapy.Request(url = pri_url,callback = self.parse_price,meta = {"jd_wtt_1":item})def parse_price(self, response):item = response.meta['jd_wtt_1']dict_data = json.loads(response.body.decode())item['price'] = dict_data[0]['p']yield item

复制scrapy_redis的settings.py文件到JD的settings.py文件中进行部分更改

SPIDER_MODULES = ['JD.spiders']
NEWSPIDER_MODULE = 'JD.spiders'USER_AGENT = 'scrapy-redis (+https://github.com/rolando/scrapy-redis)'DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"ITEM_PIPELINES = {# 'JD.pipelines.ExamplePipeline': 300,'scrapy_redis.pipelines.RedisPipeline': 400,
}# 设置redis数据库
REDIS_URL = "redis://127.0.0.1:6379"# LOG_LEVEL = 'DEBUG'# Introduce an artifical delay to make use of parallelism. to speed up the
# crawl.
DOWNLOAD_DELAY = 1

分布式爬虫总结

  • 使用场景

    • 数据量特别巨大
    • 数据要求时间比较紧张
  • 分布式的实现
    • scrapy_redis实现分布式
    • 普通爬虫实现分布式 实现去重集合与任务队列的共享
  • 分布式的部署
    • 若干台普通笔记本电脑
    • 一台服务器虚拟若干台电脑
    • 数据采集服务器若干台、管理若干台、存储若干台

scrapy_redis实现分布式爬取京东图书数据相关推荐

  1. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  2. python爬取京东书籍_一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  3. scrapy+selenuim中间件爬取京东图书有详细思考过程(涉及较广适合练手)

    网上很多版本的爬取京东图书都失效了 现在这个版本是能运行的截至到编辑的日期的前后(往后不敢保证) gitee仓库网址:https://gitee.com/cc2436686/jd_book_spide ...

  4. 爬虫学习:爬取京东图书

    爬虫学习:scrapy爬取京东图书,详情页url地址对应的响应并不能满足数据提取的需要price字段(即当前url地址对应的响应与element中不一样存在缺失,所以需要构造能够获取价格的请求) # ...

  5. python学爬虫书籍_Python3实战爬虫之爬取京东图书的图文详解

    最近在学习python3,下面这篇文章主要给大家介绍了关于Python3实战爬虫之爬取京东图书图片的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下 ...

  6. Python爬取京东商品数据

    一.前言 由于京东反爬技术较强,使用常规方法爬取其数据行不通,且使用逆向分析技术又具有一定难度,所以本文将直接使用selenium爬取京东商品数据.若不知道怎么安装和配置selenium,请点击查阅笔 ...

  7. python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析

    这篇文章主要介绍了python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析的实例,帮助大家更好的理解和学习使用python.感兴趣的朋友可以了解下 一.环境准备 python3.8.3 ...

  8. Java爬取京东商品数据

    爬取京东商品数据 我把项目部署到了linux中,进行爬取,爬到了3000条手机信息,只是爬了一些简单的文本信息. 本文爬取的数据为京东手机信息 准备工作 导入爬取数据需要的依赖包 编写httpClie ...

  9. Selenium实战之Python+Selenium爬取京东商品数据

    实战目标:爬取京东商品信息,包括商品的标题.链接.价格.评价数量. 代码核心在于这几个部分: 其一:使用元素定位来获取页面上指定需要抓取的关键字: 其二:将页面上定位得到的数据永久存储到本地文件中. ...

最新文章

  1. IDEA一定要懂的32条快捷键
  2. li前面的原点或者方的样式修改html中列表项li所显示的圆点的颜色?,以及相关样式的设定...
  3. 系统调用的实现(与errno的设置)
  4. PendingIntent与Intent区别
  5. Ribbon 与 Nginx 区别
  6. iOS应用签名原理--数字签名?代码签名?双层代码签名?
  7. jekyll网站上传服务器,jekyll 高效搭建个人博客之完整流程
  8. excel如何把顺序倒过来_Excel 中的计算运算符和优先顺序级别
  9. 前端性能优化 -- 从 10 多秒到 1.05 秒
  10. BCB6代码格式化外挂
  11. Linux下的parted工具的使用 GPT分区安装系统
  12. 2021年用独立站铁赚的四种模式
  13. java生成和识别二维码
  14. matlab2c使用c++实现matlab函数系列教程-trace函数
  15. table或者列表中超出的字用省略号代替的方法(支持IE6)
  16. 【气动学】基于matlab GUI龙格库塔算法外弹道仿真【含Matlab源码 1053期】
  17. 插入行政区划编码的sql代码
  18. win32(7)--文件操作
  19. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON1点亮LED灯
  20. 微信整人假红包图片_微信假红包图片生成器,假红包生成器微信(玩别人没商量)...

热门文章

  1. Mathematics English Vocabulary (Cited)
  2. HNUCM 1366 绿地装饰解题报告 (模拟)
  3. java 订单减库存_下单减库存
  4. 《我是黑社会》--郭德纲相声
  5. 在线字典学习(Online dictionary learning for sparse coding)-机器学习
  6. NOI2018 退役记
  7. opencv——批量修改图片像素大小
  8. 我是如何让公司后台管理系统焕然一新的(上) -性能优化
  9. 9.8 按钮button
  10. gan 的要点 (弱点与改进、推土距离)