1.网页解析

  当当网中,人工智能数据的首页url如下为http://category.dangdang.com/cp01.54.12.00.00.00.html

  

  点击下方的链接,一次观察各个页面的url变化,发现每一页的url规律如下:在进行页面切换时除第一页外,其他页面的url变化规律为只有pg后的数字会随着页面的不同而变化,并且和页面数相同,我们就可以利用此规律,运用spider类来对每一个这样的页面信息进行爬取,并且符合此种规律的页面均可以按照同样的方式来爬取;

  第1页:http://category.dangdang.com/cp01.54.12.00.00.00.html

  第2页:http://category.dangdang.com/pg2-cp01.54.12.00.00.00.html

  第3页:http://category.dangdang.com/pg3-cp01.54.12.00.00.00.html

  第4页:http://category.dangdang.com/pg4-cp01.54.12.00.00.00.html

2. scrapy 具体实现代码

  目标:爬取当当网上人工智能类数据的名称和价格,如下图:

   

  2.1)项目结构:

  

  2.2)book.py代码

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. # 导入items中的类
  4. from dangdang04.items import Dangdang04Item
  5.  
  6. class BookSpider(scrapy.Spider):
  7. name = "book"
  8. allowed_domains = ["category.dangdang.com"]
  9. url = 'http://category.dangdang.com/'
  10. offset = 1
  11. start_urls = [url + 'cp01.54.12.00.00.00.html']
  12.  
  13. def parse(self, response):
  14. # 实例化类
  15. item = Dangdang04Item()
  16. # 定义提取规则,返回selector对象
  17. book_list = response.xpath('//ul[@class="bigimg"]/li')
  18. for book_info in book_list:
  19. # 书的名称
  20. item['name'] = book_info.xpath('./p[@class="name"]/a/@title').extract()[0]
  21. # 书的价格
  22. item['price'] = book_info.xpath('./p[@class="price"]/span[1]/text()').extract()[0]
  23. yield item
  24.  
  25. if self.offset < 80:
  26. # 构建新的url再次发送请求
  27. self.offset += 1
  28. url = self.url + 'pg' + str(self.offset) + '-cp01.54.12.00.00.00.html'
  29. yield scrapy.Request(url,callback=self.parse)

  2.3)items.py代码

  1. # -*- coding: utf-8 -*-
  2. # Define here the models for your scraped items
  3. #
  4. # See documentation in:
  5. # http://doc.scrapy.org/en/latest/topics/items.html
  6.  
  7. import scrapy
  8.  
  9. class Dangdang04Item(scrapy.Item):
  10. # 图书名称
  11. name = scrapy.Field()
  12. # 价格
  13. price = scrapy.Field()

  2.4)pipelines.py代码

  1. # -*- coding: utf-8 -*-
  2. # Define your item pipelines here
  3. #
  4. # Don't forget to add your pipeline to the ITEM_PIPELINES setting
  5. # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
  6.  
  7. import json
  8.  
  9. class Dangdang04Pipeline(object):
  10. def __init__(self):
  11. # 定义json文件,用于写入爬取的目标信息
  12. self.filename = open('booklist.json','w')
  13. def process_item(self, item, spider):
  14. # 将item数据转换乘json格式数据
  15. text = json.dumps(dict(item),ensure_ascii = False) + '\n'
  16. # 将text数据写入本地文件中
  17. self.filename.write(text.encode('utf-8'))
  18. return item
  19.  
  20. def close_spider(self,spider):
  21. # 爬虫结束,关闭本地文件
  22. self.filename.close()

  2.5).settings.py文件对应设置

  1. # user-agent设置
  2. USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'
  3. # 下载延迟设置
  4. DOWNLOAD_DELAY = 2.5
  5. # 关键文件配置
  6. ITEM_PIPELINES = {
  7. 'dangdang04.pipelines.Dangdang04Pipeline': 300,
  8. }

  

  

  

  

scrapy项目3:爬取当当网中机器学习的数据及价格(spider类)的更多相关文章

  1. scrapy项目4:爬取当当网中机器学习的数据及价格(CrawlSpider类)

    scrapy项目3中已经对网页规律作出解析,这里用crawlspider类对其内容进行爬取: 项目结构与项目3中相同如下图,唯一不同的为book.py文件 crawlspider类的爬虫文件book的 ...

  2. Scrapy爬虫(5)爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...

  3. python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

    来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...

  4. 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)

    做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...

  5. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

  6. python爬取返利网中值得买中的数据

    先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy 查找目标数据使用的是beautifulsoup模块. 1.观察网页,寻找规律 打开值得买这块内容 1>分析 ...

  7. java爬虫,爬取当当网数据

     背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...

  8. 【转】java爬虫,爬取当当网数据

     背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...

  9. selenium自动化测试工具模拟登陆爬取当当网top500畅销书单

    selenium自动化测试工具可谓是爬虫的利器,基本动态加载的网页都能抓取,当然随着大型网站的更新,也出现针对selenium的反爬,有些网站可以识别你是否用的是selenium访问,然后对你加以限制 ...

随机推荐

  1. python 并发编程 多线程 线程queue

    线程queue 线程之间已经是共享数据的,为什么还使用线程queue? 线程需要自己加锁,线程queue帮我们处理好加锁的问题 有三种不同的用法 第一种方法: class queue.Queue(ma ...

  2. Confluence6.9配置邮件服务器

    一.调整confluence服务 1.在confluence安装目录下的server.xml中加一段邮件服务器的配置,加在confluence的Context中 <Context path=&q ...

  3. GTS原理、架构

    全局事务服务(Global Transaction Service,简称 GTS)是阿里新推出的分布式事务处理方案. 1. GTS 的目标 GTS是一个面向互联网交易场景的分布式事务解决方案. 制约分 ...

  4. PyQt5_主要的类库

    1.PyQt5包括的主要模块如下. QtCore模块——涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及的时间.文件.目录.数据类型.文本流.链接.QMimeData.线程或进程等对象. Qt ...

  5. 微信小程序的拖拽、缩放和旋转手势

    在开发中,有时会遇到像App中的手势那样的效果,下面就仿照App实现了一下. wxml部分: <view class="touch-container"> <vi ...

  6. Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)

    来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...

  7. mysql-5.7.25安装以及使用

    1. wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 2. ...

  8. RabbitMQ入门教程(九):首部交换机Headers

    原文:RabbitMQ入门教程(九):首部交换机Headers 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog ...

  9. 06.AutoMapper 之内联映射(Inline Mapping)

    https://www.jianshu.com/p/623655d7cb34 内联映射(Inline Mapping) AutoMapper在 6.2 以上版本将动态创建类型映射. 当第一次调用Map ...

  10. SQL语句中*号的缺点

    我觉得这篇博客说的比较好,参考借鉴一下:https://blog.csdn.net/weixin_44588186/article/details/87263756