文章目录

  • 前言
  • 一、准备信息
  • 二、详细代码
  • 三、结果
  • 四、更多

前言

最近做了一个京东手机数据分析,从JD爬了一些手机的数据,这里简单介绍一下爬取手机评论的部分。


一、准备信息

首先我们准备的数据有:

  1. 已知手机的id,可以根据京东上一款手机的网址查询得到。

  2. 评论所在的url:

           利用google chrome打开网站,右键“检查”,找到Network选项,然后刷新页面,点击商品评价,等待服务器向页面传递参数。
          找到productPageComments点击,就会在右边Header中找到评论网址。

          同时在header中也有cookie参数,将cookie参数复制到下面的代码相应位置。

将上述参数准备好后,可以运行下面代码

  • 手机id
  • 评论url网址
  • cookie

二、详细代码

#胖虎Johnny
#2020.11.10
import urllib.request
import json
import random
import time as time0
import re,os
import pandas as pd#设置代理
agents = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]def product_reviews(product_id = None,p = 0,maxPage = 99):root_dir='京东手机评论_详细字典'#判断之前是否爬取过这个型号手机的评论(一种型号的手机,颜色和内存不同,但评论共享)os.makedirs(root_dir,exist_ok=True)phone_list=os.listdir(root_dir)phone_txt=str(product_id)+'.txt'if phone_txt in phone_list:print(product_id)return []#对每一页循环爬取#"maxPage": 45k_head=0while p<maxPage:#所有品牌评论#url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId={}&score=0&sortType=5&page={}&pageSize={}&isShadowSku=0&rid=0&fold=1'#只看当前商品的评论url=  'https://club.jd.com/comment/skuProductPageComments.action?callback=fetchJSON_comment98&productId={}&score=0&sortType=5&page={}&pageSize={}&isShadowSku=0&fold=1'url = url.format(product_id, p,maxPage)#print(url)# 仿造请求头,骗过浏览器#cookie可以查找自己浏览器中的cookie,直接复制过来cookie=''headers = {'User-Agent': ''.join(random.sample(agents, 1)),'Referer': 'https://item.jd.com/1981570.html','Cookie':cookie}# 发起请求request = urllib.request.Request(url=url, headers=headers)time0.sleep(2.5)# 得到响应ti'mtry:content = urllib.request.urlopen(request).read().decode('gbk')except:print('第%d页评论代码出错' % p)p=p+1continue# 去掉多余得到json格式content = content.strip('fetchJSON_comment98vv995();')#评论的最大页数try:maxPage=int( re.findall('"maxPage":(.*?),"',content,re.S)[0] )except:passtry:obj = json.loads(content)except:print('信号不好,再次尝试!')print([content])print(url)continuecomments = obj['comments']# 产品评论总结productCommentSummary = obj['productCommentSummary']dict_pars_info={}# 平均分dict_pars_info['平均分'] = str(productCommentSummary['averageScore'])# 好评率dict_pars_info['好评率'] = str(productCommentSummary['goodRate'])# 当前总评论数dict_pars_info['当前评论数'] = str(productCommentSummary['commentCount'])# 默认评论数dict_pars_info['默认评论数'] = str(productCommentSummary['defaultGoodCount'])# 追评、好评、中评、差评dict_pars_info['追评数'] = str(productCommentSummary['afterCount'])dict_pars_info['好评数'] = str(productCommentSummary['goodCount'])dict_pars_info['中评数'] = str(productCommentSummary['generalCount'])dict_pars_info['差评数'] = str(productCommentSummary['poorCount'])if len(comments)>0:# print(comments)for comment in comments:# print(comment)name = comment['referenceName']id = comment['id']con = comment['content']time = comment['creationTime']img_url = comment['userImageUrl']score=comment['score']likes=comment['usefulVoteCount']replyCount=comment['replyCount']try:productColor = comment['productColor']except:productColor = ''try:productSize = comment['productSize']except:productSize = ''item = {'name': name,'id': id,'score': score,'con': con,'time': time,'productColor':productColor,'productSize':productSize,'likes': likes,'replyCount': replyCount,'img_url': img_url,}item.update(dict_pars_info)#print(item)string = str(item)# 1.保存为csv格式item_dataframe = pd.DataFrame([item])#print(item_dataframe)if k_head==0:item_dataframe.to_csv(root_dir+'/%d.csv' % product_id,mode='w',header=True,index=False,encoding='gbk')k_head+=1else:item_dataframe.to_csv(root_dir+'/%d.csv' % product_id,mode='a',header=False,index=False,encoding='gbk')#2.保存成txtfp = open(root_dir+'/%d.txt' % product_id, 'a', encoding='gbk')fp.write(string + '\n')fp.close()print('%s-page---finish(%s/%s)' % (p,p,maxPage))else:return []p=p+1if __name__ == '__main__':phone_id = 100008348542product_reviews(product_id=phone_id)

三、结果

我们将结果保存到csv文件中,同时也保存了一个字典类型的txt文件。数据都储存在当前新建的文件夹下——京东手机评论_详细字典。

可以看到csv中爬取的数据如上图展示,具体参数包括:

  • 评论
  • 评论id
  • 点赞数
  • 手机名称
  • 颜色
  • 版本
  • 用户评分
  • 评价时间
  • 回复数量

注意,最后八个参数,从中评数开始,一直到最后的默认评论数,都是这一款手机的数据,因此每个csv文件中,最后八个数据是相同的。

四、更多

上述代码只是针对一款手机,若是想要python更多手机的评论,则需要先爬取每一款手机的id,之后循环对id进行遍历即可。

python爬取京东一款手机的评论相关推荐

  1. 利用python爬取京东华为旗舰店手机信息(价格、型号、颜色、链接等)

    目 录 第一章.前言 1.1.效果展示 1.2.需要用到的库 1.3.原理分析 第二章.代码分开讲解 2.1.对象的定义及初始化 2.1.1.第一至二行 2.1.2.第三至四行 2.1.3.第五至六行 ...

  2. python爬虫用什么电脑好_【Python】【爬虫】最近想买电脑,用Python爬取京东评论做个参考...

    最近想换电脑,又有点不确定买哪一款.所以决定爬取京东上电脑评论,做个参考,并把最终结果绘制成词云图. 一.先来看下三款电脑评价的词云图 1 用Python爬取京东自营ThinkPad T490s的评论 ...

  3. 【Python爬虫】最近想买电脑,用Python爬取京东评论做个参考

      最近想换电脑,又有点不确定买哪一款.所以决定爬取京东上电脑评论,做个参考,并把最终结果绘制成词云图.    一.先来看下三款电脑评价的词云图    1 用Python爬取京东自营ThinkPad ...

  4. python爬取京东手机参数_python抓取京东小米8手机配置信息

    本文代码是使用python抓取京东小米8手机的配置信息 首先找到小米8商品的链接:https://item.jd.com/7437788.html 然后找到其配置信息的标签,我们找到其配置信息的标签为 ...

  5. Python爬取京东商品评论数据

    一.前言 本文将承接笔者的上篇文章Python爬取京东商品数据,使用京东商品唯一id字段"sku"拼接url,得到真实的京东商品评论网址,进而解释数据并保存到文件中,所爬取到的数据 ...

  6. Python爬取京东任意商品数据实战总结

    利用Python爬取京东任意商品数据 今天给大家展示爬取京东商品数据 首先呢还是要分思路的,我分为以下几个步骤: 第一步:得到搜索指定商的url 第二步:获得搜索商品列表信息 第三步:对得到的商品数据 ...

  7. Python爬取京东商品信息

    *使用Python爬取京东华为手机前十页的所有商品的链接.名称.价格.评价数以及店铺名称. 1.前期准备 (1)下载驱动 我使用的是谷歌浏览器,所以要下载谷歌驱动,用来告诉电脑在哪打开浏览器. 驱动文 ...

  8. [爬虫-python]爬取京东100页的图书(机器学习)的信息(价格,打折后价格,书名,作者,好评数,差评数,总评数)

    Python爬取京东的机器学习类图书的信息 一,配置搜索关键字和页数, 二,查找用到的三个URL的过程 1. 搜索图书的URL 2. 评论总数,差评数,好评数的URL 3. 当前价格与打折前价格URL ...

  9. Python爬取京东商品评论

    京东商城的页面不是静态页面,其评论信息存放于json文件中,由ajax控制,所以我们在浏览器上看到的网页源代码和用Python爬下来的是不一样的,所以我们真正要爬取的是评论数据所存放的json文件. ...

  10. Python爬取京东商品评论和图片下载

    Python爬取京东商品评论和图片下载 代码仅供学习使用,切勿扩散并且频繁爬取网站 贴上代码和注释,方便自己下次看 import requests import time import json im ...

最新文章

  1. SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理
  2. 前端论坛、博客及公众号汇总
  3. java 设计模式 示例_Java中的中介器设计模式-示例教程
  4. 【转】eclipse中egit插件使用
  5. C++工作笔记-设计普通类的格式,实现简单工厂中接口的定义
  6. 计算机二级c语言2010,全国计算机二级c语言2010历年真题及答案.doc
  7. Linux虚拟机的安装与创建【超详细】【手把手教学】
  8. 用防火墙可以防御DDoS吗?
  9. 小强统一认证中心-部署实例
  10. P3966 [TJOI2013]单词(AC自动机)
  11. 金山打字专业文章计算机,练打字试卷_推荐几篇适合学生练习打字的文章_淘题吧...
  12. 阿里云DevOps助理工程师认证题库和笔记(ACA)2021最新
  13. BZOJ3894: 文理分科
  14. R语言的修仙之道--R语言之后天境界
  15. Link context for 0x01 connection handle could not be fetched.
  16. Unity3D Shader编程】之六 暗黑城堡篇: 表面着色器(Surface Shader)的写法(一)
  17. 视频教程-ShardingSphere:SpringBoot2+MybatisPlus读写分离+分表-Java
  18. win10 SystemParametersInfo 设置屏保 不好使_Win10系统游戏优化
  19. ArcGis如何插入图片_在Word中批量插入多张图片,如何让图片统一缩小且清晰度不变?...
  20. 《Vue.js实战》知乎日报V2.0

热门文章

  1. 装修,一场没有硝烟的战争
  2. mac_ScreenSaver_第1个屏幕保护程序
  3. GCTF 2017 Web 补题 By Assassin [持续更新--抄大佬wp]
  4. 为什么需要超出48K的音频采样率,以及PCM到DSD的演进
  5. 负数除以正数余数如何求_关于数学中求余数问题的一个简单方法
  6. nginx自动切割访问日志
  7. 弹幕游戏:Ryan 最近迷上了弹幕游戏。所谓弹幕游戏,指的是玩家操控一位角色对来袭的大量敌人进行攻击,并在过程中升级、强化自我的能力,最终打败 Boss 的一类游戏...
  8. innerHTMLinnerText区别
  9. css 平行四边形 梯形 组合_css3实现平行四边形框效果
  10. python 股票分析_Python 股票分析入门