前言
用Python爬取唯品会商品数据、评论数据
提示:以下是本篇文章正文内容,下面案例可供参考
一、商品数据
1.分析页面
我们进入唯品会官网,搜索商品观察页面,向下滑动页面 可以看到数据是动态加载的,对于动态加载数据 有两种办法一个是selenium一个是找接口,我是用的selenium
2.分析url
我们拿首页url看一看,keyword就是商品关键词 无容置疑,但是关键词后面的是什么呢?不知道
https://category.vip.com/suggest.php?
keyword=%E5%B0%8F%E7%B1%B3
&ff=235|12|1|1
我们点击第二页拿出url,看一看,看到多了一个参数page,哪个不知道的参数还是不知道
https://category.vip.com/suggest.php?
keyword=%E5%B0%8F%E7%B1%B3
&ff=235%7C12%7C1%7C1
&page=2
我们大胆尝试一下,将keyword换成我们的中文,那个不知道的参数 直接去掉,最后的url
https://category.vip.com/suggest.php?keyword=小米&page=1
我们访问一下页面,看一下 是可以正常访问的,也就是说我们捏造的url是可以使用的
3.解析数据
我们上文知道了数据是动态加载的,并且分析了页面url
现在我们来操控selenium 访问url后 向下滚动 以此加载完整数据
bro.get(url)
bro.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 向下拉动一屏
self.bro.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 向下拉动一屏
加载完全数据后,就是解析数据,我们用的是Xpath
html=etree.HTML(bro.page_source)
div_list=html.xpath('//section[@class="goods-list c-goods-list--normal"]/div')[1:]
for div in div_list:
sleep(0.5)
dic={}
try:
dic["title"]=div.xpath('.//div[@class="c-goods-item__name c-goods-item__name--two-line"]/text()')[0]
except:
dic["title"]=""
注意div_list并不能全部遍历,因为数据中第一个div是空数据没有用 所以舍去
二、评论数据
1.抓包
我们利用chrome的抓包工具,很容易的就抓到了评论数据包
2.分析url
我们把它的url拿出来看一看,参数有很多,但其中有很多没有的参数,以及干扰的参数,需要我们剔除
https://mapi.vip.com/vips-mobile/rest/content/reputation/queryBySpuId_for_pc?callback=getCommentDataCb
app_name=shop_pc
app_version=4.0
warehouse=VIP_BJ
fdc_area_id=101103105
client=pc
mobile_platform=1
province_id=101103
api_key=70f71280d5d547b2a7bb370a529aeea1
user_id=
mars_cid=1616550262960_63ea57943137d7888115c8b5935ca173
wap_consumer=a
spuId=7958247815467008
brandId=1710612828
page=1
pageSize=10
timestamp=1616575850000
keyWordNlp=%E5%85%A8%E9%83%A8
_=1616575837670
最后简化后的url,这几个参数缺一不可,我们可以利用requests 中params携带参数的方式,把这些参数带上
https://mapi.vip.com/vips-mobile/rest/content/reputation/queryBySpuId_for_pc?
api_key=70f71280d5d547b2a7bb370a529aeea1
spuId=1183397626621612032
page=1
pageSize=10
如果说我们直接用上面的url直接访问是得不到数据的,因为还有需要请求头,这里有一个坑,那就是cookie中的中文 需要删掉,cookie中会携带你自己的省份和城市 这个需要删除 要不然会报错
head = {
"referer":"https://detail.vip.com/",
"cookie":'vip_address=%7B%22pid%22%3A%22101103%22%2C%22cid%22%3A%22101103105%22%2C%22pname%22%3A%22%5Cu6cb3%5Cu5317%5Cu7701%22%2C%22cname%22%3A%22%5Cu90a2%5Cu53f0%5Cu5e02%22%7D; vip_provin550262960_63ea57943137d7888115c8b5935ca173',
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
3.获取数据
我们分析好了url,现在来看数据,返回的是json数据我们进入json.cn转换一下,可以看到每一条评论数据都在data中
知道了这些就好写代码了
text=requests.get(url=url,headers=head,params=params).json()
for da in text["data"]:
dic={}
try:
dic["authorName"]=da["reputationUser"]["authorName"]
except:
dic["authorName"]=""
三、总结
唯品会的数据爬取很简单,都是常规操作,反爬不是不严重,但是数据奇少
如果说你不想写代码,想直接用爬虫,可以去公众号“阿虚学Python”中回复“唯品会”,获取本篇文章的完整代码,代码我已经设置过了,还是比较人性化的
好了,这篇文章已经结束了,如果你对爬虫感兴趣,可以关注我的主页 最近都在写一些爬虫案例,主页中已经更新了多个爬虫项目,谢谢大家的观看