爬虫项目八:Python对天猫商品数据、评论数据爬取

您所在的位置:网站首页 天猫超市全部商品价格排序 爬虫项目八:Python对天猫商品数据、评论数据爬取

爬虫项目八:Python对天猫商品数据、评论数据爬取

2024-07-10 03:47:51| 来源: 网络整理| 查看: 265

文章目录 前言一、商品数据1.分析url2.登录账号3.解析数据4.模拟滑动滑块 二、评论数据1.分析url2.解析数据

前言

天猫商城商品数据、评论数据爬取

提示:以下是本篇文章正文内容,下面案例可供参考

一、商品数据

爬取天猫商城商品数据,观察页面没有动态加载,但是页面会是不是出现登录界面,所以选择selenium登录的方式爬取商品数据,整个爬虫的过程中需要mitmdump拦截伪装,详情可看我主页文章淘宝 https://blog.csdn.net/weixin_47163937/article/details/114998786

1.分析url

我们看一下第一页的url一共有5个参数,其中肯定有无用参数,根据以往的爬虫经验可以确定的是q表示的是商品关键字

https://list.tmall.com/search_product.htm? q=%D0%A1%C3%D7 &type=p &vmarket= &spm=875.7931836%2FB.a2227oh.d100 &from=mallfp..pc_1_searchbutton

再看第二页的url,多了几个参数,这几个参数又没用呢?反复试试就好

https://list.tmall.com/search_product.htm? spm=a220m.1000858.0.0.6a205623Xb1F3l &s=60 &q=%D0%A1%C3%D7 &sort=s &style=g &from=mallfp..pc_1_searchbutton &smAreaId=130500 &type=pc#J_Filter

最后剩下的有用参数就只有两个,一个是表示关键字的q还有一个s,从下面的规律来看,s就是表示商品个数,从第几个商品个数开始显示,规律就是每下页s+60 第一页为0 即:s=(page-1)60,q表示关键字可以直接换成中文*

第一页:https://list.tmall.com/search_product.htm?&s=0&q=%D0%A1%C3%D7 第二页:https://list.tmall.com/search_product.htm?&s=60&q=%D0%A1%C3%D7 第三页:https://list.tmall.com/search_product.htm?&s=120&q=%D0%A1%C3%D7

最终的url模板

https://list.tmall.com/search_product.htm?&s=(page-1)*60&q=商品关键字 2.登录账号

如果看过我之前写的淘宝的爬虫登录我想这就不用说了,可以看下面的连接文章

https://blog.csdn.net/weixin_47163937/article/details/114998786

使用扫码登录手机淘宝确认的方式实现登录,其中整个爬虫的过程中需要mitmdump拦截伪装,CMD进入文件夹 调用mitmdump -s HttpProxy.py -p 9000 上面链接的文章已经详细说明

通过selenium访问页面出现登录页面强制休眠40秒,手机扫码登录

3.解析数据

扫码登录进入页面之后,我们来打印一下一共有多少页数,这样可以了解我们要获取多少页 在这里插入图片描述 通过xpath定位获取文本,再利用正则表达式提取出页数

page = self.bro.find_element_by_xpath('//form[@name="filterPageForm"]').text page=int(re.findall('(\d+)',page)[0])

根据页数我们可以制作循环,利用input交互式翻页

self.start_page=input("请输入起始页数:") self.end_page=input("请输入结束页数:") for i in range(int(self.start_page),int(self.end_page)+1): self.bro.get("https://list.tmall.com/search_product.htm?s=%d&q=%s"%((i-1)*60,self.keyword))

进入商品页面,右键检查元素,可以看到,每一个商品数据都在div标签下 在这里插入图片描述 根据这些,可以利用Xpath定位来获取数据

代码如下(示例):

html=etree.HTML(self.bro.page_source) div_list=html.xpath('//div[@id="J_ItemList"]/div') for div in div_list: dic={} try: dic["title"]=div.xpath('.//p[@class="productTitle"]/a[1]/@title')[0] except: dic["title"]="" try: dic["price"]=div.xpath('.//p[@class="productPrice"]/em[1]/@title')[0] except: dic["price"]="" try: dic["sales"]=re.findall('(\d+)',div.xpath('.//p[@class="productStatus"]/span[1]/em[1]/text()')[0])[0] except: dic["sales"]="" print(dic) with open(".//tmall.csv", "a+", encoding="utf-8") as f: writer = csv.DictWriter(f, dic.keys()) writer.writerow(dic) 4.模拟滑动滑块

当你完成扫码登录时有可能出现滑块,需要直接手动滑走,我试过用selenium滑动 别检测了 不可以,我把滑块代码放下面 有兴趣的自己研究 在这里插入图片描述

def Page_Slider_Slide(self): Slider = self.bro.find_element_by_xpath('//*[@id="nc_1_n1z"]') # 动作链 action = ActionChains(self.bro) # 点击长按指定的标签 action.click_and_hold(Slider).perform() action.move_by_offset(xoffset=260, yoffset=0).perform() action.release()

效果 在这里插入图片描述

二、评论数据

我们通过chrome的抓包工具可以 利用搜索功能找到评论数据包

在这里插入图片描述

1.分析url https://rate.tmall.com/list_detail_rate.htm? itemId=637718172384 &spuId=1974781701 &sellerId=2024314280 &order=3 ¤tPage=2 &append=0 &content=1 &tagId= &posi= &picture= &groupId= &ua=098%23E1hvQ9v4vfIvUvCkvvvvvjiWPLdOljDRP2FpsjthPmPOAj3vPFcwQjiPn2cZsjtn9vhvHHiwrTCozHi47qBTt1Q471Y4NYGBdvhvmpvC8QPHvv2ldTQCvvyvvBGz49vvG6u%2BvpvEvvHOcRIvvVIb9vhv2HiwRM%2FSjHi473qPzTQCvCZV9NFqq9vvOUZDjlRDKfZ3%2BbydLrVvvpvZ7DSGMl2w7Di4fSS5MvrfwxdLz6k%2BvpvEvvHZZHyvvveNi9hvCvvvpZpgvpvhvvCvpvgCvvpvvPMMvvhvC9mvphvvvv9CvhQCTaNcjXZTKFyzOvxr1EKK5u6aWXxreEAK53rV%2BE7reEuKNZ0QD40Oe4tYLfmD5iyfezBO0f06W3vOJ1kHsfUpV36AxYjxRLwp%2B3%2BFkvhvC9hvpyP9t89Cvv9vvhhtIp3n7d9Cvm9vvhCvvvvvvvvvByOvvvHivvCVB9vv9LvvvhXVvvmCjvvvByOvvUhw39hvCvmvphm%2BvpvEvUhE2aOvvUn4dvhvmpmvlnC%2FvvmEU29CvvpvvhCvdvhvmpmCfeiwvvm8%2BTQCvChhvJSSu9vvgwODj6KHkoVQRL9CvvpvvhCvdvhvmpmCZHRNvvCQZOvCvv14cx2zKn147DIqQnGgvpvhvvCvpv%3D%3D&needFold=0&_ksTS=1616652793241_1231 &callback=jsonp1232

经过筛选最终剩余有用的参数

https://rate.tmall.com/list_detail_rate.htm? itemId=638745107951 &sellerId=268451883 &order=3 ¤tPage=2 ==>页数 2.解析数据

请求头应包含referer、cookie、user-agent

head={ "referer":"https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.19.7fae1259B86Ot8&id=638745107951&skuId=4750693590803&areaId=130100&user_id=268451883&cat_id=2&is_b=1&rn=e8a3583611f939545fa4eff7ad5d1e04", "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", "cookie":"hng=CN|zh-CN|CNY|156; lid=tb850619367; enc=XWYuCFHvbY6LVFJ8O82ekXp7zn+BpC5PqaDfnxPqRhFZ3W/9+P5VfZz/dkT7I/bzeQzh30BWA80E8sSw7Zc/9Y6soPAlKMR2SftG72vIPXM=;" }

我们利用url并且添加请求头信息返回的数据中有干扰数据,其中开头的jsonp128就是

jsonp128({"rateDetail":{"rateCount":{"total":742,"shop":0,"picNum":431,"used":49}

我们将其返回数据字符串剔除掉无用数据,再将其转换为json数据

text=requests.get(url=url,headers=head,params=params).text text=text.replace("jsonp128","").replace("(","").replace(")","") data=json.loads(text)

我们将数据放到json.cn中观察,可以看到所以的评论数据数据在rateList中 在这里插入图片描述 代码如下(示例):

for da in data["rateDetail"]["rateList"]: dic={} try: dic["displayUserNick"]=da["displayUserNick"] except: dic["displayUserNick"]="" try: dic["auctionSku"]=da["auctionSku"] except: dic["auctionSku"]="" with open(".//comment.csv", "a", encoding="utf-8") as f: writer = csv.DictWriter(f, dic.keys()) writer.writerow(dic)

效果 在这里插入图片描述 完整代码在公众号”阿虚学Python“回复”天猫“获取 在这里插入图片描述 谢谢大家的观看



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭