python抓取京东联盟优惠券_[爬⾍]使⽤python抓取京东全站数
据(商品,店铺,分类。。。
单片机可视化编程软件⽹上抓取京东数据的⽂章,现在要么⽆法抓取数据,要么只能抓取部分数据,本⽂将介绍如何抓取京东全站数据,包括商品信息、店铺信息,评论信息,分类信息等。
-------------------------------------------------------------------------------
⼀、环境OS:win10
python:3.5
scrapy:1.3.2
pymongo:3.2
标识符的第一个字符必须pycharm
环境搭建,⾃⾏百度
⼆、数据库说明
1. 产品分类
京东⼤概有1183个分类,这是除去了⼀些虚拟产品(话费、、车票等)的分类,可以到如下⽹页查看:
我们也是从这个⽹址开始抓取。由于这些分类⾥⾯也有属于频道的页⾯,也就是说,这个分类⾥⾯也有很多⼦分类,需要做⼀些特殊处理才
可以拿到所有分类,具体⽅法,下⽂再说。
name #分类名称
url #分类url
_id #分类id
2. 产品
url #产品url
_id #产品id
category #产品分类
reallyPrice #产品价格
originalPrice #原价
description #产品描述
shopId #shop id
venderId #vender id
commentCount #评价总数
goodComment #好评数
generalComment #中评数
poolComment #差评数
favourableDesc1 #优惠描述1
favourableDesc2 #优惠描述2
3. 评论_id #评论id
productId #产品id
guid
content #评论内容
creationTime #评论时间
isTop
referenceId
referenceName
referenceType
网页设计登录按钮代码referenceTypeId
firstCategory
secondCategory
thirdCategory
replyCount #回复次数
score #分数京东python入门教程
status
title
usefulVoteCount #被标记的有⽤评论数
uselessVoteCount #被标记的⽆⽤评论数
编译程序直接执行源程序userImage
userImageUrl
userLevelId
userProvince
viewCount
orderId #订单id
isReplyGrade
nickname #评论⼈的名称
userClient
mergeOrderStatus
discussionId
productColor
productSize
imageCount #评论中图⽚的数量
integral
userImgFlag
anonymousFlag
userLevelName
plusAvailable
recommend
userLevelColor
userClientShow
isMobile #是否移动端评论
days
afterDays #追加评论数
4. 店铺_id #店铺名称
name #店铺名称
url1 #店铺url1
url2 #店铺url2
shopId #shop id
venderId #vender id
5. 评论总结_id
goodRateShow #好评率
poorRateShow #差评率
poorCountStr #差评数字符串
averageScore #平均分
generalCountStr #中评数字符串
showCount
showCountStr
goodCount #好评数
generalRate #中评率
generalCount #中评数
skuId
goodCountStr #好评数字符串
poorRate #差评率
afterCount #追评数
goodRateStyle
poorCount
skuIds
poorRateStyle
generalRateStyle
commentCountStr
commentCount
productId #产品id
afterCountStr
goodRate
generalRateShow
jwotestProduct
maxPage
score
soType
imageListCount
三、抓取说明
1. 抓取分类
代码如下:
def parse_category(self, response):
"""获取分类页"""
selector = Selector(response)
try:
texts = selector.xpath('//div[@class="category-item m"]/div[@class="mc"]/div[@class="items"]/dl/dd/a').extract() for text in texts:
items = re.findall(r'', text)
for item in items:
if item[0].split('.')[0][2:] in key_word:
if item[0].split('.')[0][2:] != 'list':
yield Request(url='https:' + item[0], callback=self.parse_category)
else:
categoriesItem = CategoriesItem()
categoriesItem['name'] = item[1]
categoriesItem['url'] = 'https:' + item[0]
categoriesItem['_id'] = item[0].split('=')[1].split('&')[0]
yield categoriesItem
yield Request(url='https:' + item[0], callback=self.parse_list)
except Exception as e:
print('error:', e)
如前⽂所说,有些类别⾥⾯包含有很多⼦类别,所以对于这样的url,需要再次进⾏类别抓取:
if item[0].split('.')[0][2:] != 'list':
yield Request(url='https:' + item[0], callback=self.parse_category)
2. 抓取产品
访问每个类别的url就可以获取得到产品列表,到产品的URL,进⼊详情页⾯抓取产品的详情:
def parse_list(self, response):
arraylist的底层数据结构是什么
"""分别获得商品的地址和下⼀页地址"""
meta = dict()
meta['category'] = response.url.split('=')[1].split('&')[0]
selector = Selector(response)
texts = selector.xpath('//*[@id="plist"]/ul/li/div/div[@class="p-img"]/a').extract()
for text in texts:
items = re.findall(r'
yield Request(url='https:' + items[0], callback=self.parse_product, meta=meta)
产品的基本信息在详情页⾯基本可以获取,但是有些信息,⽐如:价格、优惠政策等信息,是需要动态获取的。先来看价格信息,访问的URL格式为:
这个url最后括号⾥⾯的信息就是产品的id,需要动态获取,代码如下:
response = (url=price_url + product_id)
price_json = response.json()
productsItem['reallyPrice'] = price_json[0]['p']
productsItem['originalPrice'] = price_json[0]['m']
获取得到的都是json格式,⽐较好解析。
再来看优惠信息,优惠信息分为两种:优惠券和满减描述:
所以需要抓取这两种信息,都是动态加载,代码如下:
# 优惠
res_url = favourable_url % (product_id, shop_id, vender_id, place(',', '%2c'))
# print(res_url)
response = (res_url)
fav_data = response.json()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论