# -*- coding: utf-8 -*-
import scrapy
import urllib
import json
from copy import deepcopy class JdSpider(scrapy.Spider):
name = 'jd'
allowed_domains = ['jd.com', 'p.3.cn']
start_urls = ['https://book.jd.com/booksort.html'] def parse(self, response):
# 大分类
dt_list = response.xpath("//div[@class='mc']/dl/dt")
for dt in dt_list:
item = {}
item['b_cate_name'] = dt.xpath("./a/text()").extract_first() # 大分类名字
# 小分类
dd_list = dt.xpath("./following-sibling::dd[1]")
for dd in dd_list:
item['s_cate_name'] = dd.xpath("./em/a/text()").extract_first() # 小分类名字
item['s_cate_url'] = dd.xpath("./em/a/@href").extract_first() # 小分类url
if item['s_cate_url'] is not None:
item['s_cate_url'] = urllib.parse.urljoin(response.url, item['s_cate_url'])
yield scrapy.Request(
item['s_cate_url'],
callback=self.parse_book_list,
meta={'item': deepcopy(item)}
) def parse_book_list(self, response):
item = response.meta['item']
book_list = response.xpath("//li[@class='gl-item']") # 小分类中的书
for book in book_list:
item['book_buy_url'] = book.xpath(".//div[@class='p-img']/a/@href").extract_first()
if item['book_buy_url'] is not None:
item['book_buy_url'] = urllib.parse.urljoin(response.url, item['book_buy_url'])
item['book_img_url'] = book.xpath(".//div[@class='p-img']/a/img/@src").extract_first()
if item['book_img_url'] is None:
item['book_img_url'] = book.xpath(".//div[@class='p-img']/a/img/@data-lazy-img").extract_first()
item['book_name'] = book.xpath(".//div[@class='p-name']/a/em/text()").extract_first().strip()
item['book_author'] = book.xpath(".//span[@class='author_type_1']/a/text()").extract()
item['skuIds'] = book.xpath(".//div/@data-sku").extract_first() # 通过书的id获取价格
yield scrapy.Request(
'https://p.3.cn/prices/mgets?skuIds=J_{}'.format(item['skuIds']),
callback=self.parse_book_price,
meta={'item': deepcopy(item)}
) # 小分类 下一页
next_url = response.xpath("//a[@class='pn-next']/@href").extract_first()
if next_url is not None:
next_url = urllib.parse.urljoin(response.url, next_url)
yield scrapy.Request(
next_url,
callback=self.parse_book_list,
meta={'item': item}
) def parse_book_price(self, response):
item = response.meta['item']
item['book_price'] = json.loads(response.body.decode())[0]['op']
print(item)
yield item

scrapy爬去京东书籍信息的更多相关文章

  1. selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装

    今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...

  2. 用scrapy爬取京东的数据

    本文目的是使用scrapy爬取京东上所有的手机数据,并将数据保存到MongoDB中. 一.项目介绍 主要目标 1.使用scrapy爬取京东上所有的手机数据 2.将爬取的数据存储到MongoDB 环境 ...

  3. selenium+phantomjs爬取京东商品信息

    selenium+phantomjs爬取京东商品信息 今天自己实战写了个爬取京东商品信息,和上一篇的思路一样,附上链接:https://www.cnblogs.com/cany/p/10897618. ...

  4. Python爬虫-爬取京东商品信息-按给定关键词

    目的:按给定关键词爬取京东商品信息,并保存至mongodb. 字段:title.url.store.store_url.item_id.price.comments_count.comments 工具 ...

  5. Scrapy实战篇(七)之Scrapy配合Selenium爬取京东商城信息(下)

    之前我们使用了selenium加Firefox作为下载中间件来实现爬取京东的商品信息.但是在大规模的爬取的时候,Firefox消耗资源比较多,因此我们希望换一种资源消耗更小的方法来爬取相关的信息. 下 ...

  6. 八个commit让你学会爬取京东商品信息

    我发现现在不用标题党的套路还真不好吸引人,最近在做相关的事情,从而稍微总结出了一些文字.我一贯的想法吧,虽然才疏学浅,但是还是希望能帮助需要的人.博客园实在不适合这种章回体的文章.这里,我贴出正文的前 ...

  7. 利用selenium爬取京东商品信息存放到mongodb

    利用selenium爬取京东商城的商品信息思路: 1.首先进入京东的搜索页面,分析搜索页面信息可以得到路由结构 2.根据页面信息可以看到京东在搜索页面使用了懒加载,所以为了解决这个问题,使用递归.等待 ...

  8. scrapy爬取京东iPhone11评论(一)

    咨询行业中经常接触到文本类信息,无论是分词做词云图,还是整理编码分析用,都非常具有价值. 本文将记录使用scrapy框架爬取京东IPhone11评论的过程,由于一边学习一边实践,更新稍慢请见谅. 1. ...

  9. python 爬取豆瓣书籍信息

    继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取).原创,转载请联系我. 需求:爬取豆瓣某类型标签下的所有书籍的详细信息及评分 语言:pyth ...

随机推荐

  1. python基础(五)

    一.os模块 import os# os.rename(old,new)#重命名# os.remove(f)#删除文件 # os.mkdir('china/beijing') #创建文件夹# os.m ...

  2. HTML相关内容

    一,HTML标签的分类 1,单标签和双标签 2,内联标签:span,b,u,i,a,img   块级标签:h1~h6,p,div,hr,ul,ol,li 二,常用标签 1,head内常用标签 标签 含 ...

  3. JAVA for(i = 0; i<a.length; i++) 解析

    下列 System.out.printf 语句输出的结果是什么? Char a[]={„a‟,‟b‟,‟c‟,‟d‟,‟e‟}; For(i=0; i<=a.length/2; i++) { c ...

  4. ubuntu常见问题解决方法

    系统版本:ubuntu 18.04 lts 电脑:拯救者y7000 1.开机卡屏 无法进如 这可能是没安装英伟达显卡驱动,在grub 界面在 splash 后面添加 nomodeset 即可进入桌面 ...

  5. 枪弹辩驳(弹丸论破)即将登陆PC

    Spike Chunsoft在PSP上的经典推理游戏: 枪弹辩驳1(Danganronpa: Trigger Happy Havoc)即将登陆PC, PC党有福了. 不过我在PSVita上已经玩完了两 ...

  6. Python实例之抓取网易云课堂搜索数据(post方式json型数据)并保存到数据库

    本实例实现了抓取网易云课堂中以‘java’为关键字的搜索结果,经详细查看请求的方式为post,请求的结果为JSON数据 具体实现代码如下: import requests import json im ...

  7. PyCharm导入tensorflow包

    若是你也遇到这个问题,说明你也没有理解tensorflow到底在哪里. 当安装了anaconda3.6后,在PyCharm中设置interpreter,这个解释器决定了你在PyCharm环境中写的代码 ...

  8. bootstrap简单使用实例

    表格实例,包含bootstrap.css 和 2.1.1jquery <!DOCTYPE html> <html> <head> <meta charset= ...

  9. head first c初探网络编程上

    server连接网络四部曲. 为了与外界沟通,c程序用数据流读写字节,比較经常使用的数据流有标准输入.标准输出.文件等. 假设想写一个与网络通信的程序.就须要一种新的数据流----------套接字. ...

  10. golang操作memcached 转自https://blog.csdn.net/weixin_37696997/article/details/78760397

    go使用memcached需要第三方的驱动库,这里有一个库是memcached作者亲自实现的,代码质量效率肯定会有保障 1:安装 go get github.com/bradfitz/gomemcac ...