毕设需要大量的商品评论,网上找的数据比较旧了,自己动手

代理池用的proxypool,github:https://github.com/jhao104/proxy_pool

ua:fake_useragent

 1 # 评价较多的店铺(苏宁推荐)
 2 https://tuijian.suning.com/recommend-portal/recommendv2/biz.jsonp?parameter=%E5%8D%8E%E4%B8%BA&sceneIds=2-1&count=10
 3
 4 # 评价
 5 https://review.suning.com/ajax/cluster_review_lists/general-30259269-000000010748901691-0000000000-total-1-default-10-----reviewList.htm?callback=reviewList
 6
 7 # clusterid
 8 # 在查看全部评论的href中,实际测试发现是执行js加上的,两种方案
 9 # 1.去匹配js中的clusterId
10 # 2.或者用selenium/phantomjs去请求执行js之后的页面然后解析html获得href

代码:

  1 # -*- coding: utf-8 -*-
  2 # @author: Tele
  3 # @Time  : 2019/04/15 下午 8:20
  4 import time
  5 import requests
  6 import os
  7 import json
  8 import re
  9 from fake_useragent import UserAgent
 10
 11
 12 class SNSplider:
 13     flag = True
 14     regex_cluser_id = re.compile("\"clusterId\":\"(.{8})\"")
 15     regex_comment = re.compile("reviewList\((.*)\)")
 16
 17     @staticmethod
 18     def get_proxy():
 19         return requests.get("http://127.0.0.1:5010/get/").content.decode()
 20
 21     @staticmethod
 22     def get_ua():
 23         ua = UserAgent()
 24         return ua.random
 25
 26     def __init__(self, kw_list):
 27         self.kw_list = kw_list
 28         # 评论url 参数顺序:cluser_id,sugGoodsCode,页码
 29         self.url_temp = "https://review.suning.com/ajax/cluster_review_lists/general-{}-{}-0000000000-total-{}-default-10-----reviewList.htm"
 30         self.headers = {
 31             "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
 32         }
 33         self.proxies = {
 34             "http": None
 35         }
 36         self.parent_dir = None
 37         self.file_dir = None
 38
 39     # ua,proxy
 40     def check(self):
 41         self.headers["User-Agent"] = SNSplider.get_ua()
 42         proxy = "http://" + SNSplider.get_proxy()
 43         self.proxies["http"] = proxy
 44         print("ua:", self.headers["User-Agent"])
 45         print("proxy:", self.proxies["http"])
 46
 47     # 评论
 48     def parse_url(self, cluster_id, sugGoodsCode, page):
 49         url = self.url_temp.format(cluster_id, sugGoodsCode, page)
 50         response = requests.get(url, headers=self.headers, proxies=self.proxies, verify=False)
 51         if response.status_code == 200:
 52             print(url)
 53             if len(response.content) < 0:
 54                 return
 55             data = json.loads(SNSplider.regex_comment.findall(response.content.decode())[0])
 56             if "commodityReviews" in data:
 57                 # 评论
 58                 comment_list = data["commodityReviews"]
 59                 if len(comment_list) > 0:
 60                     item_list = list()
 61                     for comment in comment_list:
 62                         item = dict()
 63                         try:
 64                             # 商品名
 65                             item["referenceName"] = comment["commodityInfo"]["commodityName"]
 66                         except:
 67                             item["referenceName"] = None
 68                         # 评论时间
 69                         item["creationTime"] = comment["publishTime"]
 70                         # 内容
 71                         item["content"] = comment["content"]
 72                         # label
 73                         item["label"] = comment["labelNames"]
 74                         item_list.append(item)
 75
 76                     # 保存
 77                     with open(self.file_dir, "a", encoding="utf-8") as file:
 78                         file.write(json.dumps(item_list, ensure_ascii=False, indent=2))
 79                         file.write("\n")
 80                     time.sleep(5)
 81             else:
 82                 SNSplider.flag = False
 83         else:
 84             print("评论页出错")
 85
 86     # 提取商品信息
 87     def get_product_info(self):
 88         url_temp = "https://tuijian.suning.com/recommend-portal/recommendv2/biz.jsonp?parameter={}&sceneIds=2-1&count=10"
 89         result_list = list()
 90         for kw in self.kw_list:
 91             url = url_temp.format(kw)
 92             response = requests.get(url, headers=self.headers, proxies=self.proxies, verify=False)
 93             if response.status_code == 200:
 94                 kw_dict = dict()
 95                 id_list = list()
 96                 data = json.loads(response.content.decode())
 97                 skus_list = data["sugGoods"][0]["skus"]
 98                 if len(skus_list) > 0:
 99                     for skus in skus_list:
100                         item = dict()
101                         sugGoodsCode = skus["sugGoodsCode"]
102                         # 请求cluserId
103                         item["sugGoodsCode"] = sugGoodsCode
104                         item["cluster_id"] = self.get_cluster_id(sugGoodsCode)
105                         id_list.append(item)
106                 kw_dict["title"] = kw
107                 kw_dict["id_list"] = id_list
108                 result_list.append(kw_dict)
109             else:
110                 pass
111         return result_list
112
113     # cluserid
114     def get_cluster_id(self, sugGoodsCode):
115         self.check()
116         url = "https://product.suning.com/0000000000/{}.html".format(sugGoodsCode[6::])
117         response = requests.get(url, headers=self.headers, proxies=self.proxies, verify=False)
118         if response.status_code == 200:
119             cluser_id = None
120             try:
121                 cluser_id = SNSplider.regex_cluser_id.findall(response.content.decode())[0]
122             except:
123                 pass
124             return cluser_id
125         else:
126             print("请求cluster id出错")
127
128     def get_comment(self, item_list):
129         if len(item_list) > 0:
130             for item in item_list:
131                 id_list = item["id_list"]
132                 item_title = item["title"]
133                 if len(id_list) > 0:
134                     self.parent_dir = "f:/sn_comment/" + item_title + time.strftime("-%Y-%m-%d-%H-%M-%S",
135                                                                                     time.localtime(time.time()))
136                     if not os.path.exists(self.parent_dir):
137                         os.makedirs(self.parent_dir)
138                     for product_code in id_list:
139                         # 检查proxy,ua
140                         sugGoodsCode = product_code["sugGoodsCode"]
141                         cluster_id = product_code["cluster_id"]
142                         if not cluster_id:
143                             continue
144                         page = 1
145                         # 检查目录
146                         self.file_dir = self.parent_dir + "/" + sugGoodsCode[6::] + "_ratecontent.txt"
147                         self.check()
148                         while SNSplider.flag:
149                             self.parse_url(cluster_id, sugGoodsCode, page)
150                             page += 1
151                         SNSplider.flag = True
152                 else:
153                     print("---error,empty id list---")
154         else:
155             print("---error,empty item list---")
156
157     def run(self):
158         self.check()
159         item_list = self.get_product_info()
160         print(item_list)
161         self.get_comment(item_list)
162
163
164 def main():
165     # , "华为mate20pro", "vivoz3", "oppok1", "荣耀8x", "小米9", "小米mix3", "三星s9", "iphonexr", "iphonexs"
166     # "华为p30pro", "华为mate20pro", "vivoz3""oppok1""荣耀8x", "小米9"
167     kw_list = ["小米mix3", "三星s9", "iphonexr", "iphonexs"]
168     splider = SNSplider(kw_list)
169     splider.run()
170
171
172 if __name__ == '__main__':
173     main()

转载于:https://www.cnblogs.com/tele-share/p/10719925.html

毕设一:python 爬取苏宁的商品评论相关推荐

  1. python爬取苏宁商品评论

    python爬取苏宁商品评论 爬取其他电商物品评论的案例如下: https://blog.csdn.net/coffeetogether/article/details/114296159 https ...

  2. 利用python爬取东方财富网股吧评论并进行情感分析(一)

    利用python爬取东方财富网股吧评论(一) python-东方财富网贴吧文本数据爬取 分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论.涉及内容在前人的研究基础之 ...

  3. python 爬取携程旅游景点评论

    python爬取携程旅游景点评论 爬取网址:https://you.ctrip.com/ 爬取评论全部代码 import requests import json import re import t ...

  4. python 爬取亚马逊评论_用Python爬取了三大相亲软件评论区,结果...

    小三:怎么了小二?一副愁眉苦脸的样子. 小二:唉!这不是快过年了吗,家里又催相亲了 ... 小三:现在不是流行网恋吗,你可以试试相亲软件呀. 小二:这玩意靠谱吗? 小三:我也没用过,你自己看看软件评论 ...

  5. python爬取国家男女比例_用python爬取3万多条评论,看韩国人如何评价韩国电影《寄生虫》?...

    用python爬取3万多条评论,看韩国人如何评价韩国电影<寄生虫>? 朱小五 凹凸数据 大家好,我是朱小五 今天给大家带来一个关于电影的数据分析文章. 别走啊,这次不是豆瓣,也不是猫眼 真 ...

  6. python爬取携程景区用户评论

    python爬取携程景区用户评论(爬虫时遇到翻页但url不变问题时的解决办法) python爬取携程景区用户评论 Ajax页面加载的页面和普通页面的不同 解决办法 效果 python爬取携程景区用户评 ...

  7. 用Python爬取淘宝网商品信息

    用Python爬取淘宝网商品信息 转载请注明出处 网购时经常会用到淘宝网 点我去淘宝但淘宝网上的商品琳琅满目,于是我参照中国大学 MOOC的代码写了一个爬取淘宝网商品信息的程序 代码如下: impor ...

  8. python爬取网抑云音乐评论

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.python爬取网抑云音乐评论 前言 提示:这里可以添加本文要记录的大概内容: python爬取网抑云音乐评论 提 ...

  9. python 爬取苏宁易购商品信息和评论的详细流程

    总体说明 爬取苏宁易购的最大难点就在于他这个页面是很多js动态加载的内容,寻找和构造链接比较麻烦,如果不用JS逆向工程.采用selenium等爬取的效率相对会比较差一点,下面我会先放上我找的js动态加 ...

  10. python爬取B站动态的评论总数(不含用户评论内容详情)

    目录 前言 需求 方案分析 方案一 方案二 接口分析 请求流程 抓包演示 请求接口 接口说明 接口测试 代码 前言 想看接口分析和代码的,可跳过前言. 更新,最核心的代码已删除,思路和其他代码保留. ...

最新文章

  1. Java基础篇:Java集合
  2. R语言ggplot2地理信息可视化(上)
  3. OAuth2.0学习(1-6)授权方式3-密码模式(Resource Owner Password Credentials Grant)
  4. OpenNRE 2.0:可一键运行的开源关系抽取工具包
  5. 跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)
  6. [Leetcode][第546题][JAVA][移除盒子][递归][动态规划]
  7. 有望年底登场!小米12系列即将备案:骁龙895+2亿像素!
  8. 计算机应用技术知识,计算机应用技术主要学什么
  9. PHP Zend Studio9.0怎么把代码搞成和服务器端的同步(就是直接在服务器端修改)
  10. 告别鼠标——【Windows下常见系统快捷键】
  11. Vuex actions 异步操作基础
  12. MVVM后,下一代开发模式在哪?
  13. diamond简介和使用
  14. Xshell远程连接服务器
  15. 批处理QQ音乐生成的文件名
  16. data: function () { return {}} ——你不应该在一个子组件内部改变 prop
  17. (很容易懂,你把代码复制粘贴即可解决问题)高等代数/线性代数-基于python实现矩阵法求解齐次方程组
  18. V2X消息之SPAT消息解读
  19. 跨越“数字鸿沟”,日本老年智能化服务的解法
  20. html5及CSS的学习2

热门文章

  1. 常见排序算法之插入排序
  2. jquery中ajax的使用例子($.ajax())
  3. Nacos注册中心之服务实例心跳续约与实例过期下线源码解析
  4. CVE2014-6287分析报告
  5. 在Linux环境下select函数的初体验
  6. Windows切换窗口
  7. 防止页面高度不足,引起的底部上浮问题
  8. 桌面支持--dcc打印机设置注意
  9. combo 边写边选的注意事项
  10. Android Studio R类找不到(Mac)