zl程序教程

您现在的位置是:首页 >  后端

当前栏目

记一次简单的电商网站python爬虫练习

Python爬虫网站 简单 一次 练习 电商
2023-06-13 09:18:51 时间

一、分析电商网站源码结构

1 确定目标网页并找到文件

使用Chrome浏览器,打开京东华为手机页面,网址为:https://item.jd.com/10026765609672.html

按键盘上的F12键,进入开发者工具页面。点击开发者工具里的“NetWork”,再点击商品详情页里的“商品评论”,就可以看到浏览器请求的数据文件。

我们随便复制一句评论,在网页源码中查找,发现并没有找到评论内容,说明jd的评论页面并非静态网页。

利用Filter过滤网址,输入comment,查找相关的网址请求url,此请求就是获取商品评论内容。

在response中查看数据,可以找出保存评论数据的js文件。

文件链接:https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10026765609672&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1

相应地切换到【Preview】,可以看到这是一个json串,包含很多信息,包括10条评论。

2 切换评论页数,确定url规则

将评论切换至第二页、第三页。

根据上述分析,我们发现获得评论数据的请求url为:

第一页:https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10026765609672&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1

第二页:https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10026765609672&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&fold=1

第三页:https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10026765609672&score=0&sortType=5&page=2&pageSize=10&isShadowSku=0&fold=1

二、分析电商评论部分字段含义

首先看下返回的Json形式的评论,可以看到格式比较混乱,可读性较差

想办法格式化一下,访问代码格式化工具https://www.sojson.com/,使用此工具,对Json评论进行格式化。

可以看到如下格式比较清晰的效果:

在结构化的Json中,查找有用的信息。

  • productCommentSummary 存储了对该商品全部评论的汇总信息;  
  • comments 存储了当前页面的10条评论数据  
	"productCommentSummary": {
		"skuId": 10026765609672,
		"averageScore": 5,    //平均分
		"defaultGoodCount": 0,
		"defaultGoodCountStr": "100+",
		"commentCount": 0,
		"commentCountStr": "200+",  //评论数
		"goodCount": 0,
		"goodCountStr": "77",  //好评数
		"goodRate": 0.98,
		"goodRateShow": 98,  //好评率
		"generalCount": 0,
		"generalCountStr": "0",
		"generalRate": 0.0,
		"generalRateShow": 0,
		"poorCount": 0,
		"poorCountStr": "1",   //差评数
		"poorRate": 0.02,
		"poorRateShow": 2,   //差评率
		"videoCount": 0,
		"videoCountStr": "5",  //视频数量
		"afterCount": 0,
		"afterCountStr": "2",
		"showCount": 0,
		"showCountStr": "26",
		"oneYear": 0,
		"sensitiveBook": 0,
		"fixCount": 0,
		"plusCount": 0,
		"plusCountStr": "0",
		"buyerShow": 0,
		"poorRateStyle": 3,
		"generalRateStyle": 0,
		"goodRateStyle": 147,
		"installRate": 0,
		"productId": 10026765609672,
		"score1Count": 1,
		"score2Count": 0,
		"score3Count": 0,
		"score4Count": 0,
		"score5Count": 77
	},

comments中一条评论的结构:

		"id": 15350638073,
		"guid": "baa252551edeb827bec65ee9416d9e6a",
		"content": "折叠大屏,分屏应用是这手机最大亮点 \n拍照效果,很清楚,现在的手机都是一天一充…通信音质挺清楚的 \n这配置运行速度很快快。大屏看电视确实比其他手机爽",  //评论内容
		"creationTime": "2021-02-25 10:50:48",  //评论时间
		"isDelete": false,   //是否删除
		"isTop": false,   //是否置顶
		"userImageUrl": "storage.360buyimg.com/i.imageUpload/33333730363635343131343638323736373335393937_sma.jpg",
		"topped": 1,
		"replies": [],
		"replyCount": 31,  
		"score": 5,  //评分
		"imageStatus": 1,
		"title": "",
		"usefulVoteCount": 15,
		"userClient": 4,
		"discussionId": 870313391,
		"imageCount": 5,
		"anonymousFlag": 1,
		"plusAvailable": 103,
		"mobileVersion": "",
		"images": [{
			"id": 1369933751,
			"imgUrl": "//img30.360buyimg.com/n0/s128x96_jfs/t1/164195/32/9198/73507/60371087Ec23acc2f/4c0fd92eb3617fa5.jpg",
			"imgTitle": "",
			"status": 0
		}, {
			"id": 1369933752,
			"imgUrl": "//img30.360buyimg.com/n0/s128x96_jfs/t1/155330/19/19923/106563/60371087E0d19143a/d616d31f1f99f75a.jpg",
			"imgTitle": "",
			"status": 0
		}, {
			"id": 1369933753,
			"imgUrl": "//img30.360buyimg.com/n0/s128x96_jfs/t1/169703/10/7828/51665/60371088Ece65b24d/dad4551a6619f823.jpg",
			"imgTitle": "",
			"status": 0
		}, {
			"id": 1369933754,
			"imgUrl": "//img30.360buyimg.com/n0/s128x96_jfs/t1/171475/16/7788/43421/60371088E4e402b5d/b297d59b79213638.jpg",
			"imgTitle": "",
			"status": 0
		}, {
			"id": 1369933755,
			"imgUrl": "//img30.360buyimg.com/n0/s128x96_jfs/t1/155068/39/19526/27160/60371088E732cb76f/32787df1efcb0a46.jpg",
			"imgTitle": "",
			"status": 0
		}],
		"mergeOrderStatus": 2,
		"productColor": "冰晶粉",
		"productSize": "全网通256GB【套餐】",
		"textIntegral": 0,
		"imageIntegral": 0,
		"status": 1,
		"referenceId": "10026656336939",
		"referenceTime": "2021-02-20 15:59:03",  //收货时间
		"nickname": "风***4",  //用户昵称
		"replyCount2": 48,
		"userImage": "storage.360buyimg.com/i.imageUpload/33333730363635343131343638323736373335393937_sma.jpg",
		"orderId": 0,
		"integral": 0,
		"productSales": "[]",
		"referenceImage": "jfs/t1/168319/35/12598/182767/604845edE4db70731/04c7035beff3b76d.jpg",
		"referenceName": "华为Mate X2/MateX2新款折叠屏手机5G手机【分期可选】 冰晶蓝+ 全网通512GB【白条24期免息】",  //购买商品名称
		"firstCategory": 9987,  //第一分类
		"secondCategory": 653,  //第二分类
		"thirdCategory": 655,  //第三分类
		"aesPin": null,
		"days": 5,
		"afterDays": 0

了解了相关字段含义,下面开始使用scrapy框架,编写爬虫,爬取商品评论。 

三、搭建爬虫代码框架

打开pycharm 使用命令创建scrapy项目文件

scrapy startproject jdspider

[c-alert type="warning"]如果未安装scrapy框架可以在terminal中使用命令:pip install scrapy 安装[/c-alert]

创建成功如图: