首先查看以下当当网的页面结构,可以看到的是图书的大小分类都在class="con flq_body"的div中。记得要看看页面源代码中是否有这些数据噢

然后可以看到所有小分类的链接都在class="inner dl"的dl标签中,所以使用link_extractor可以直接提取,再到详情页面获取大小分类。
然后将下一页的链接也提取出来,这样就可以获取到所有的数据咯

具体分析已经做完就可以开始敲代码,首先开始写一个crawlspider文件。可以自己写import,如果嫌麻烦可以直接使用cmd创建

from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpiderclass SpiderSpider(CrawlSpider):name = 'dd_book'allowed_domains = ['dangdang.com']# redis_key = 'dangdang'start_urls = ['http://book.dangdang.com/']rules = (# 直接提取小分类的页面的链接并请求页面Rule(LinkExtractor(restrict_xpaths='//dl[@class="inner_dl"]/dd/a'), callback='parse_data',follow=True),# 提取下一页的链接并请求  因为scrapy的请求是放在调度器中Rule(LinkExtractor(restrict_xpaths='//ul[@name="Fy"]/li/a'), callback='parse_data'))def parse_data(self, response):print(response)

以下为打印的response结果:

同时记住不要忘记提取他的分类噢

可以看到已经请求到这些图书的链接。然后再开始获取这些页面的图书信息,可以看到这些图书都在class="bigimg"的ul标签下的li标签里,只需要提取到ul标签下的所有的li标签,遍历之后再提取就好了


提取图书信息的代码如下:

    def parse_data(self, response):item = {}# 获取分类信息item['big_sort'] = response.xpath('//div[@class="crumbs_fb_left"]/div[1]/a/text()').extract_first()item['small_sort'] = response.xpath('//div[@class="crumbs_fb_left"]/div[2]/a/text()').extract_first()# 因为当当有些图书页面结构不一样,所以的话会查询不到,需要加一个判断if item['big_sort']:# 获取该页面下所有的包含图书信息的li标签lis = response.xpath('//ul[@class="bigimg"]/li')# 遍历提取需要的信息for li in lis:item['book_name'] = li.xpath('./a/@title').extract_first()item['price_now'] = li.xpath('./p[@class="price"]/span[@class="search_now_price"]/text()').extract_first()item['price_pre'] = li.xpath('./p[@class="price"]/span[@class="search_pre_price"]/text()').extract_first()item['book_shop'] = li.xpath('./p[@class="search_shangjia"]/a/text()').extract_first()# print(item)yield item

运行结果如下,可以看到所有需要的信息都被提取到了,他的价格竟然可以直接获取,哈哈,也是很容易就获取到了呢,就是他有的图书页面的结构是不一样的,所以需要加一个判断,不一样的结构页面我就不爬咯
然后再settings文件中添加以下配置

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True    # 为false Redis关闭了 Redis数据也会被清空
REDIS_URL = "redis://127.0.0.1:6379"

修改spider文件,让他继承RedisCrawlSpider,然后不需要start_urls,这个需要我们使用redis客户端手动压入,对了别忘记开启redis服务端噢,现在就实现了分布式爬虫,关闭爬虫之后,下次再开始就不会继续爬取上次已经爬过的内容

from scrapy_redis.spiders import RedisCrawlSpider
from copy import deepcopyclass SpiderSpider(RedisCrawlSpider):name = 'dd_book'allowed_domains = ['dangdang.com']redis_key = 'dangdang'# start_urls = ['http://book.dangdang.com/']

到现在就可以使用pipeline直接保存爬取到的信息咯,再配置项中开启pipeline,我选择保存在MongoDB,因为MongoDB比较适合保存字典类型的文件,pipeline文件如下,MongoDB使用的时候也不能忘记开启服务端哟

from pymongo import MongoClientclass DangdangPipeline(object):def __init__(self):self.mongo_cli = MongoClient(host='localhost', port=27017)self.db = self.mongo_cli['dang_dang_book']def process_item(self, item, spider):self.db.dang_dang_book.insert_one(item)print(item, '已保存')return item

最终保存结果如下,大概不到3分钟获取了1万多条数据,settings中还设置了delay为3秒,速度还是挺快的:

RedisCrawlSpider爬取当当图书信息相关推荐

  1. 爬取当当图书排行榜(榜单自选),格式:爬取结果包含但不限于[排名 书名 作者],注意输出格式对齐

    目录 爬取当当图书排行榜 查看当当图书排行榜,分析其网址各部分代表的意义,选取特定分类和时间区间进行爬取 解析网页内容,查看所需信息(排名,书名,作者,出版社,价格)的位置: 筛选所需数据,输出并保存 ...

  2. 【selenium爬虫】 selenium自动化爬取京东图书信息

    一.题目要求:搜索京东图书页,自动点击详情页进入,爬取数据信息并且存储到csv中二.解题思路:1.需要下载一个chromedriver.exe.下载地址:ChromeDriver Mirror 注意: ...

  3. Python数据爬虫学习笔记(21)Scrapy爬取当当图书数据并存储至SQLite数据库

    一.需求:在当当网的程序设计类图书商品界面中,爬取图书的名称.详情链接以及评论数,并将信息存储至SQLite数据库. 二.URL及网页源码分析: 1.URL分析,注意到商品搜索页的URL具有以下结构: ...

  4. 我的第一个Scrapy 程序 - 爬取当当网信息

    前面已经安装了Scrapy,下面来实现第一个测试程序. 概述 Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网) 简单的说,我们需要写一个item文件,定义返回的数据结构:写一个s ...

  5. scrapy 爬取当当图书名字图片

    1.创建项目和创建爬虫参考上一篇博客. 2.dang.py import scrapy from scrapy_dangdang.items import ScrapyDangdangItemclas ...

  6. Python网络爬虫实战练习:爬取豆瓣图书信息

    一.注意事项 1.文件名尽量使用英文,避免出现编码问题 2.含中文的文件写入,注意标注编码,如: with open(r"C:\Users\10335\Desktop\response.tx ...

  7. 在当当买了python怎么下载源代码-Python爬取当当、京东、亚马逊图书信息代码实例...

    注:1.本程序采用MSSQLserver数据库存储,请运行程序前手动修改程序开头处的数据库链接信息 2.需要bs4.requests.pymssql库支持 3.支持多线程 from bs4 impor ...

  8. java爬取当当网所有分类的图书信息(ISBN,作者,出版社,价格,所属分类等)

    java爬取当当网所有分类的图书信息(ISBN,作者,出版社,价格,所属分类等) 顺手写的,没有建立新项目,放我自己的项目的一个文件夹里了,有兴趣的朋友可以拉下来试试 https://gitee.co ...

  9. Python爬虫 离线爬取当当网畅销书Top500的图书信息

    本实例还有另外的在线爬虫实现,有兴趣可点击在线爬取当当网畅销书Top500的图书信息 爬虫说明 1.使用requests和Lxml库爬取,(用BS4也很简单,这里是为了练习Xpath的语法) 2.爬虫 ...

  10. python 爬虫 爬取当当网图书信息

    初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...

最新文章

  1. [python skill]利用python计算T分布下的置信区间
  2. Netty详解(五):Netty TCP粘包 拆包
  3. mysql双机数据热备份_如何设置MySql数据同步实现双机热备份
  4. css选择器的综合使用
  5. PO/BO/VO/DTO/POJO/DAO/DO
  6. 交换机MAC地址学习和转发数据帧的原理
  7. 前端学习(2839):swiper属性
  8. 一文教你如何使用 MongoDB 和 HATEOAS 创建 REST Web 服务
  9. 等式变换java解法
  10. ASP.Net学习笔记001--ASP.Net简介1
  11. cocos2dx标准容器_cocos2dx基础篇(5)——浅析几个重要类
  12. 【机器学习】主成分分析 (PCA)、无监督特征提取
  13. 使用js调用摄像头拍照
  14. 分享多款从淘宝购买的EXCEL进销存模板,可直接用于小企业的进销存管理与仓库管理
  15. 手机qq旋风.android,QQ旋风安卓版2020,QQ旋风手机版安卓版2020最新版本预约 v1.0 - 浏览器家园...
  16. 如何将heic格式批量转化jpg
  17. Win10x64-WDM设备驱动开发入门 - 第六章 VMware-Win10x64+WDK10+VS2015/2019环境搭建与双机调试
  18. ubuntu 、emacs中使用翻译功能
  19. 高中计算机学考操作excel,高中信息技术学业水平考试Word、Excel操作题考点总结...
  20. 手机射频电路全面解析

热门文章

  1. 一、网络安全专有名词汇编详解(黑话指南)-史上最全
  2. python爬虫验证码的处理(云打码)_python爬虫验证码的处理(云打码)
  3. 【php毕业设计】基于php+mysql+apache的在线购物网站设计与实现(毕业论文+程序源码)——在线购物网站
  4. 下载速度15MB/s,度盘新版本?
  5. 计算机 行列式,行列式计算器
  6. Kaggle:Tabular Playground Series - May 2021
  7. 调研AutoGluon数据处理与Tabular-NN
  8. Anaconda下载及安装(图文)
  9. t470键盘拆解_联想ThinkPad T470拆机图解教程
  10. mysql查询市区县_通过数据库获取省份城市区县的名字