背景:
之所以产生这个程序的原因是,想买一块手表,看中了卡西欧的398元中的两款。
https://detail.tmall.com/item.htm?id=42487922508
https://detail.tmall.com/item.htm?id=39457378637
但是不知道到底该买那一款。在看这两个商品的评论时候,发现有评论说是送给男朋友的。正好在学习爬虫,于是就有了这么一个想法:把两个商品的评论都获取到,然后对比这个两个商品的评论,那个商品“送男朋友”的评论比较多,就表示在女生眼中,那一个就是比较好的。嗯,根据这个来决策,完美!
想法有了,怎么实现呢?最关键的是怎么获取到商品评论数据呢?总不能自己手动一页页去复制粘贴吧。
我也不知道啊,于是就在网上找资料,最后通过下面两个教程提供的代码实现了。
https://blog.csdn.net/qq_40946921/article/details/99684483
https://www.bilibili.com/video/av16701031
没有耐心的同学可以通过点击下面的链接,直接跳到最后看结论,到底哪一款手表比较好。源代码下载地址也在最后面。
那么怎么获取到商品评论数据呢?
获取评论数据步骤:
1. 获取评论的链接地址
首先浏览器打开https://detail.tmall.com/item.htm?id=42487922508,然后点击查看累计评价,一直下拉到可以翻下一页的地方,按F12, 出现一个控制台,点击Network—>JS,最后点击下一页。如下图所示:
然后点击跳出来的链接:
点击它之后,会出现如下图所示:其中的Header, Preview, Response, Timing都是可以点击的,我们在Response中看到了评论数据,但是评论数据的链接地址是在Header里面。
2. 分析评论链接地址
把在Header的Request URL后面的链接地址复制出来:
https://rate.tmall.com/list_detail_rate.htm?itemId=42487922508&spuId=274798218&sellerId=749901026&order=3¤tPage=2&append=0&content=1&tagId=&posi=&picture=&groupId=&ua=098%23E1hvEpvNvJyvUvCkvvvvvjiPRsqUsjlPPLdWljivPmPh6j3bR2qWljnvRFLw1j3C9phvHnQGHermzYswSbsM7MaGM8qwBluCdphvmpvClWxxvvPqGUhCvvswj8xdJrMwzEATIHurvpvEvUViKfIvvxaadphvmpvCBHcDvvhgvOhCvvswMhtd0aMwzPQsDHurvpvEvUExBR6vv2C%2BCQhvCYsw7DdN%2BrItvpvhvvCvp86CvvyvvcX55pvvul0CvpvWzC1tcF5NznswOL34dphvmpvmv9OmvvvhiIwCvvpv9hCv2QhvCvvvMM%2FEvpvVvpCmpYswuphvmvvvpoYvZeppKphv8vvvphNMMQC%2FvvCHZ9vv94QvvhNjvvvmjvvvBGwvvvUUvvCHO9vv9J9EvpCW9vSq%2F1z6eE9OjjDx0f06W3vOJ1kHsfUpeEiTmEcBKFyzhmx%2Fgj7JhoTTwhVx6mTTVE9FhzjxVEk1%2BC1iQWpsjmTTwhVBeoTTVE9Fh9hCvvOv9hCvvvvtvpvhvvCvp8wCvvpvvhHh9phvHnsGtDzHzYswz21R7%2FakzmbwmliIRphvCvvvphvtvpvhvvCvp86Cvvyv9ByUhpvvjFeCvpvWzCAp4QSNznswt014RphvCvvvphmrvpvEvvHea1Zv9n0g9phv2nsGVVrozYswjvdS7u6CvvyvvB%2BZJQvCRk7rvpvEvvHyahpvvwyX&needFold=0&_ksTS=1572236677151_1956&callback=jsonp1957
呃,一大堆东西,看得头晕眼花…不过还好,参照教程,知道只要带下面这些参数就可以了。
itemId=42487922508:表示商品的id为42487922508
sellerId=749901026:表示店铺的id为 749901026
order=3:表示评论的排序方式是默认,如果order=1就表示评论按时间排序
currentPage=2:表示当前评论是第2页
_ksTS=1572236677151_1956:表示当时请求链接的时间戳
callback=jsonp1957:根据上面的时间戳来生成,就是1956+1
最后链接简化为:
https://rate.tmall.com/list_detail_rate.htm?itemId=42487922508& sellerId=749901026&order=3¤tPage=2&_ksTS=1572236677151_1956&callback=jsonp1957
3. 代码实现
其他的,比如构造浏览器头部信息,设置淘宝评论url参数,翻页,获取评论的过程,在代码中都有注释,就不在这里一一说明了
# *-* coding:utf-8 *-*
import requests
import time
import random
# 为什么引入下面两个东西呢?因为requests.get(url, verify=False)里面引入了verify参数,
# 就会出现InsecureRequestWarning: Unverified HTTPS request is being made告警
# 然后为了取消告警,就添加这两行代码
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 来源 :
# https://blog.csdn.net/qq_40946921/article/details/99684483
# https://www.bilibili.com/video/av16701031
class TaoBao():
url = "https://rate.tmall.com/list_detail_rate.htm"
header = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.8",
"Cache-Control": "max-age=0",
"Connection": "close",
"Upgrade-Insecure-Requests": "1",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
# 当出现rgv587_flag的时候,可以换为自己的cookie
"cookie": "cna=eGXNFRhRSkkCAbfhJLKH8aWp; _m_h5_tk=7d827b7269161b2bec1e75221f12e13b_1565891528974; _m_h5_tk_enc=7a2b5c3133447a619a160b42f8bb9335; x=__ll%3D-1%26_ato%3D0; hng=CN%7Czh-CN%7CCNY%7C156; uc1=cookie14=UoTaHoqcxosmvA%3D%3D; uc3=nk2=1DsN4FjjwTp04g%3D%3D&lg2=UIHiLt3xD8xYTw%3D%3D&