scrapy抓取苏宁所有图书

采用mongodb存储爬取图书数据,爬取苏宁全网图书信息(图书名,图书所属详细分类商店,价格)

注意

  1. 需要根据苏宁图书网页分类建立相应分类

  2. 图书详情页每页有60条图书数据,但response.body中只有30条,需要构造url发起请求获取

  3. 实际操作发现–>雅思IELTS的url 地址与其他详情页图书不同,需要单独构造url发起请求

  4. 需将setting中robots协议改为false

  5. 价格抓取图书详情页构造url进行抓取

  6. 在for循环内yield scrapy.Request需用deepcopy

suning.py

import scrapy
import re
from copy import deepcopyclass SuningSpider(scrapy.Spider):name = 'suning'allowed_domains = ['suning.com']start_urls = ['http://book.suning.com/']def parse(self, response):# 获取大分类div_list = response.xpath("//div[@class='menu-list']/div[@class='menu-item']")div_sub_list = response.xpath("//div[@class='menu-list']/div[@class='menu-sub']")for div in div_list:item = {}# 大分类的名字item['b_cate'] = div.xpath(".//h3/a/text()").get()# 获取中介分类的位置current_sub_div = div_sub_list[div_list.index(div)]# 获取中间分类的分组p_list = current_sub_div.xpath(".//div[@class='submenu-left']/p[@class='submenu-item']")for p in p_list:# 中间分类的名字item["m_cate"] = p.xpath("./a/text()").get()# 获取小分类的分组li_list = p.xpath("./following-sibling::ul[1]/li")for li in li_list:# 获取小分类的名字item['s_cate'] = li.xpath("./a/text()").get()# 或取小分类的urlitem['s_href'] = li.xpath("./a/@href").get()# 请求图书列表页yield scrapy.Request(item['s_href'],callback=self.parse_book_list,meta={"item": deepcopy(item)})# 发送请求获取列表页后一半内容next_part_url_temp = "https://list.suning.com/emall/showProductList.do?ci={}&pg=03&cp=0&il=0&iy=0&adNumber=0&n=1&ch=4&prune=0&sesab=ACBAABC&id=IDENTIFYING&cc=394&paging=1&sub=0"ci = item['s_href'].split('-')if len(ci)>1:ci = item['s_href'].split('-')[1]next_part_url = next_part_url_temp.format(ci)else:name = item['s_cate']next_part_url_temp_d = "https://search.suning.com/emall/searchProductList.do?keyword={}&ci=0&pg=01&cp=3&il=0&st=0&iy=0&adNumber=0&n=1&ch=4&sesab=ACAABAABCCAA&id=IDENTIFYING&cc=394&paging=1&sub=0"next_part_url = next_part_url_temp_d.format(name)yield scrapy.Request(next_part_url,callback=self.parse_book_list,meta={"item": deepcopy(item)})def parse_book_list(self, response):item = response.meta["item"]li_list = response.xpath("//li[contains(@class,'product')]")# print(len(li_list))# print("*"*100)for li in li_list:# 书名item['book_name'] = li.xpath(".//p[@class='sell-point']/a/text()").get().strip()# 书链接地址item['book_href'] = li.xpath(".//p[@class='sell-point']/a/@href").get()# 书商店名item['book_store_name'] = li.xpath(".//p[contains(@class,'seller oh no-more')]/a/text()").get()# print(item)yield response.follow(item['book_href'],callback=self.parse_book_detail,meta={'item': deepcopy(item)})next_url_1 = "https://list.suning.com/emall/showProductList.do?ci={}&pg=03&cp={}&il=0&iy=0&adNumber=0&n=1&ch=4&prune=0&sesab=ACBAABC&id=IDENTIFYING&cc=394"next_url_2 = "https://list.suning.com/emall/showProductList.do?ci={}&pg=03&cp={}&il=0&iy=0&adNumber=0&n=1&ch=4&prune=0&sesab=ACBAABC&id=IDENTIFYING&cc=394&paging=1&sub=0"next_url_1_d = "https://search.suning.com/emall/searchProductList.do?keyword={}&ci={}&pg=01&cp=1&il=0&st=0&iy=0&adNumber=0&n=1&ch=4&sesab=ACAABAABCCAA&id=IDENTIFYING&cc=394"next_url_2_d = "https://search.suning.com/emall/searchProductList.do?keyword={}&ci={}&pg=01&cp=1&il=0&st=0&iy=0&adNumber=0&n=1&ch=4&sesab=ACAABAABCCAA&id=IDENTIFYING&cc=394"current_Page = re.findall('param.currentPage = "(.*?)";', response.body.decode())[0]total_Page = re.findall('param.pageNumbers = "(.*?)";', response.body.decode())[0]if int(current_Page) < int(total_Page):next_page_num = int(current_Page) + 1ci = item['s_href'].split('-')if len(ci) > 1:ci = item['s_href'].split('-')[1]next_url_1 = next_url_1.format(ci, next_page_num)next_url_2 = next_url_2.format(ci, next_page_num)else:name = item['s_cate']next_url_1 = next_url_1_d.format(name, next_page_num)next_url_2 = next_url_2_d.format(name, next_page_num)yield scrapy.Request(next_url_1,callback=self.parse_book_list,meta={"item": item})# print("*"*100)next_url_2 = next_url_2.format(ci, next_page_num)yield scrapy.Request(next_url_2,callback=self.parse_book_list,meta={"item": item})# print("?"*100)def parse_book_detail(self, response):item = response.meta['item']price_temp_url = "https://pas.suning.com/nspcsale_0_0000000{}_0000000{}_{}_180_394_3940199_502282_1000118_9118_10920_Z001___{}_{}________0___0.0_2__502320_502687_.html"p1 = response.url.split('/')[-1].split('.')[0]p3 = response.url.split('/')[-2]p4 = re.findall('"catenIds":"(.*?)"', response.body.decode())if len(p4)>0:p4 = p4[0]p5 = re.findall('"weight":"(.*?)"', response.body.decode())[0]price_url = price_temp_url.format(p1, p1, p3, p4, p5)yield scrapy.Request(price_url,callback=self.parse_book_price,meta={'item': item})def parse_book_price(self, response):item = response.meta['item']item['book_price'] = re.findall('"netPrice":"(.*?)"', response.body.decode())[0]yield item

scrapy抓取苏宁所有图书并保存到数据库相关推荐

  1. Python进阶之Scrapy抓取苏宁图书数据

    Python进阶之Scrapy抓取苏宁图书数据 1. 需求 2. 代码示例: 创建项目 start.py settings.py iterms.py snb.py pipelines.py 3. 注意 ...

  2. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  3. scrapy爬取苏宁所有图书

    苏宁图书 https://book.suning.com/ 目标: 爬取苏宁图书下所有书本的系信息 爬取每个大分类(文学艺术)下的中间分类(小说)下的每个小分类(中国当代小说)的书本信息,并且进行翻页 ...

  4. selenium抓取苏宁图书

    selenium绕过js,实现滚动条自动向下滑动,抓取苏宁图书 目标url:烹饪/美食[报价 品牌 口碑评价 测评 正品行货 限时低价 分期] -苏宁易购 from selenium import w ...

  5. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)

    老早之前就听说过python的scrapy.这是一个分布式爬虫的框架,可以让你轻松写出高性能的分布式异步爬虫.使用框架的最大好处当然就是不同重复造轮子了,因为有很多东西框架当中都有了,直接拿过来使用就 ...

  6. scrapy抓取淘宝女郎

    scrapy抓取淘宝女郎 准备工作 首先在淘宝女郎的首页这里查看,当然想要爬取更多的话,当然这里要查看翻页的url,不过这操蛋的地方就是这里的翻页是使用javascript加载的,这个就有点尴尬了,找 ...

  7. 解决Scrapy抓取中文网页保存为json文件时中文不显示而是显示unicode的问题

    注意:此方法跟之前保存成json文件的写法有少许不同之处,注意区分 情境再现: 使用scrapy抓取中文网页,得到的数据类型是unicode,在控制台输出的话也是显示unicode,如下所示 {'au ...

  8. scrapy抓取的中文结果乱码解决办法

    使用scrapy抓取的结果,中文默认是Unicode,无法显示中文. 中文默认是Unicode,如:\u5317\u4eac\u5927\u5b66 解决办法,原文:http://www.aisun. ...

  9. scrapy抓取淘宝女郎 1

    scrapy抓取淘宝女郎 准备工作 首先在淘宝女郎的首页这里查看,当然想要爬取更多的话,当然这里要查看翻页的url,不过这操蛋的地方就是这里的翻页是使用javascript加载的,这个就有点尴尬了,找 ...

最新文章

  1. 十五天精通WCF——第三天 client如何知道server提供的功能清单
  2. Java--获取request中所有参数的方法
  3. MariaDB10 主从配置
  4. C++入门经典-例2.13-左移运算
  5. android 投票功能,腾讯新闻Android客户端更新 加入投票功能
  6. GO开发 -- could not launch process: decoding dwarf section info at offset 0x0: too short
  7. DataGrip汉化方法
  8. vim 文本编辑器_标志性的文本编辑器Vim庆祝成立25周年
  9. Tablet UI模式: 中心舞台
  10. Vista部署的一些收集
  11. 未知宽高div水平垂直居中的3种方法
  12. jquery和Js的区别和基础操作
  13. java实现萤火虫算法_基于萤火虫算法的矢量图生成方法
  14. Web端微信授权登录
  15. 西数MyBookDuo提供致臻性能、超大容量及综合数据保护
  16. 读书·2018(14本)
  17. 一个故事轻松记忆常见252个英语字根(31~80)
  18. Linux-发送邮件
  19. Unity3D FPS游戏之子弹贴图
  20. 开源代码分析技巧之三——老外如是说

热门文章

  1. 微积分——巧解不定积分和定积分问题
  2. javascipt 学习笔记
  3. 漫画 | 软件开发的门槛是如何降低的?
  4. 圆形风格的移动应用实例
  5. MATLAB算法实战应用案例精讲-【深度学习】多尺度特征融合(补充篇)
  6. SpringBoot--启动时的事件机制
  7. springboot 启动和关闭事件
  8. css的中心点,指定变形中心点CSS3
  9. Quiver for Mac 3.1.3 程序员的记事笔记本 破解版下载
  10. 量化投资常用技能——指标篇2:详解BOLL(布林线)指标,及其代码实现和绘图