当前位置:   article > 正文

【爬虫】Python爬取电商平台评论_在线爬取淘宝商品评论

在线爬取淘宝商品评论

更新:目前淘宝的参数已经变更,这是2020年(2020.4)的代码参数,已经无法使用。但是,思路仍然可以参考。


目前网站上很多爬取评论的博文都已经失效了,所以自己尝试写一篇目前可行的爬取代码。我们以爬取淘宝的APPLE官方旗舰店的Iphone11为例。
打开淘宝页面,按下F12快捷键,进入开发者模式。点击累计评价。然后在开发者窗口左上角输入list,找到相应的进程。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
这里发现了评论。寻找请求头headers信息。找到请求的url,发现其中只有三个参数是会改变的。发现其中的规律。
首先是"currentPage"参数,这是评论的页码,
第二个是"_ksTS"参数,通过观察得出这是一个时间戳,并且下划线前面的是
13位数字,这是固定的,多余的时间戳都放到下划线的后面。
这里用time模块的time方法构造。

import time
t_param=time.time()
t_list=str(t_param).split(".") #将时间戳格式拆分
t_list[0]+t_list[1][:3] #这是下划线前面的部分
t_list[1][3:]   #这是下划线后面的部分
  • 1
  • 2
  • 3
  • 4
  • 5

第三个参数是callback回调参数。这个参数前面的"jsonp"是固定的,后面的数字是time参数的最后三个数字加一,图中的337=336+1。

"callback":str(int(t_list[1][3:])+1)
  • 1

这样页面的url就基本构造完成,只需把url的上述三个参数删除即可。

其实这里的url里面的 ua 参数好像是可有可无的,不影响,可以自己尝试一下。

url=“https://rate.tmall.com/list_detail_rate.htm?itemId=602659642364&sellerId=1917047079”
url构造好了现在只需构造请求头信息,参数信息均可在Headers选项中找到。

headers={
		"Cookie":""
		"referer":""
		"User-Agent":""
		}
  • 1
  • 2
  • 3
  • 4
  • 5

现在将代码整合:

import requests
import time
import json
def get_content(url):
	t_param=time.time()
	t_list=str(t_param).split(".")
	headers={
		"Cookie":"",
		"referer":"",
		"User-Agent":""
			}
	params={
			"callback":str(int(t_list[1][3:])+1),
			"_ksTS":t_list[0]+t_list[1][:3]+"_"+t_list[1][3:],
			"currentPage":"1"
			}
	res=requests.get(url,params=params,headers=headers).text
	print(res)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

这里我们先看一下获取的文本的格式,可以看出这是一个json格式的,但是这个文本在前面多了冗余的部分我们需要将它删除才能正确解析。

res=requests.get(url,params=params,headers=headers).text[len(str(int(t_list[1][3:])+1))+3:-1]
#前面的多余部分就是"_ksTS"参数下划线后面的部分
#注意末尾还有一个括号,不同评论索引需要进行相应的调整。
  • 1
  • 2
  • 3

在这里插入图片描述
接下来使用json库进行解析。输出如下。这里如果报错,应该是text处的索引不对,可以确认一遍进行修改。

res2=json.loads(res)
res3=json.dumps(res2,indent=4)
#以上两步是为了美化json的输出格式,方便获取内容,省略也可。
result=json.loads(res3)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
要获取我们的需要的信息需要进行索引。结果如下。

result_content=result["rateDetail"]["rateList"][0]["rateContent"]
#索引中的[0]是获取第一条评论,可以进行循环一页获取20条评论。这里只是示例。
  • 1
  • 2

在这里插入图片描述
这里就基本运行完成。可以整合一下代码并加入循环。

import requests
import time
import json
def get_content(url):
	t_param=time.time()
	t_list=str(t_param).split(".")
	headers={
		"Cookie":"",
		"referer":"",
		"User-Agent":""
			}
	params={
			"callback":str(int(t_list[1][3:])+1),
			"_ksTS":t_list[0]+t_list[1][:3]+"_"+t_list[1][3:],
			"currentPage":"1"
			}
	res=requests.get(url,params=params,headers=headers).text[len(str(int(t_list[1][3:])+1))+3:-1]
	res2=json.loads(res)
	res3=json.dumps(res2,indent=4)
	#以上两步是为了美化json的输出格式,方便获取内容,省略也可。
	result=json.loads(res3)
	for items in range(20): 
		result_content=result["rateDetail"]["rateList"][items]["rateContent"]
		print(result_content)
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

后续可以自己完善代码,将结果写入文件,也可以加入循环爬取更多页码的评论。这里不再详写。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/555692
推荐阅读
相关标签
  

闽ICP备14008679号