失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python爬取商品信息 包括标题 店铺 价格 评论数量 好评数 差评数 好评率

Python爬取商品信息 包括标题 店铺 价格 评论数量 好评数 差评数 好评率

时间:2022-08-20 02:49:32

相关推荐

Python爬取商品信息 包括标题 店铺 价格 评论数量 好评数 差评数 好评率

Python爬取电商商品信息,包括标题、店铺、价格、评论数量、好评数、差评数、好评率

对电商商城数据的爬取主要是评论数量的爬取,标题、店铺、价格等字段可以直接获取网页源码然后通过etree进行解析,但是评论数量字段是隐藏的,因此需要通过抓包获取

本次数据采集的目标数据包括商品名称、商品价格、商品店铺、评论数量等信息,具体如下表所示。

采集方式:通过观察页面结构查看目标数据位置,发现商品名称、价格、店铺数据都能够直接从网页中获取首先,爬取商品基本信息,需要使用requests获取到网页源码,然后通过etree的xpath模块获取指定标签的文本数据。通过模拟头部信息和cookie信息,来应对网站的反爬虫机制。

但是对于评论数据是动态加载的,无法直接解析得到。为了更完整的获取商品的评论数量数据,利用了谷歌浏览器的开发者工具,通过NetWork模块找到了评论数据所在的json包,通过抓取评论数据所在的jsob包来获取对应的数据,在通过商品id这一唯一标识来将基础数据和评论数据结合到一起。

最终得到了食品的详细数据和评论数据。

基础信息抓取

首先获取网页源码,解析标题、店铺、价格等字段,模拟的请求头信息可以通过浏览器开发者工具来查看

#模拟请求头headers ={'user-agent':''}res = requests.get(url,headers=headers)# 获取源码res.encoding = 'utf-8'# 编码格式text = res.text # 获取text#etree+xpath解析selector = etree.HTML(text)list = selector.xpath('//*[@id="J_goodsList"]/ul/li')rows = []for i in list:# 获取每条数据title=i.xpath('.//div[@class="p-name p-name-type-2"]/a/em/text()')price = i.xpath('.//div[@class="p-price"]/strong/i/text()')[0]product_id = i.xpath('.//div[@class="p-commit"]/strong/a/@id')[0].replace("J_comment_","")try:shop = i.xpath('.//div[@class="p-shop"]/span/a/text()')[0]except IndexError:shop=''title = ' '.join(title)print("title"+str(title))print("price="+str(price))print("product_id="+str(product_id))print("shop="+str(shop))print("-----")rows.append([product_id,title.replace('\n',''),price,shop,pinpai])

利用xpath进行解析还是方便哈,对于可能不存在的数据try一下

获取的数据如下

评论数量抓取

然后根据商品id获取对应的评论数据,评论数据隐藏在网页的JSON包中,访问是需要输入自己的Cookie信息

#模拟请求头kv = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36","cookie": "你的Cookie" # cookie信息每个人都不同,需登录到网站,通过浏览器查看cookie信息}'''抓评论'''pids = data[0]for i in range(1,231):# 根据之前爬取的商品id拼接urlnewpids=pids[100*(i-1):100*i]comment_url = "?referenceIds="comment_r = requests.get(comment_url,headers=kv)p_comment = []for comment in comment_r.json()["CommentsCount"]:p_comment.append([comment['ProductId'],comment["CommentCountStr"], comment["AverageScore"],comment["GoodCountStr"], comment["DefaultGoodCountStr"],comment["GoodRate"],comment["AfterCountStr"],comment["VideoCountStr"],comment["PoorCountStr"], comment["GeneralCountStr"]])# 总评数,平均得分,好评数,默认好评,好评率,追评数,视频晒单数,差评数,中评数

获取的数据如下

合并

然后通过商品id将两个csv文件进行合并

#根据商品id拼接评论数据和原始数据df1 = pd.read_csv('result.csv', encoding='utf-8')#读取第一个文件df2 = pd.read_csv('result1.csv', encoding='utf-8')#读取第二个文件df1['商品id'] = df1['商品id'].astype(str)df2['商品id'] = df2['商品id'].astype(str)outfile = pd.merge(df1, df2, left_on='商品id', right_on='商品id')#outfile.to_csv('result2.csv', index=False,encoding='utf-8')#输出文件

品牌获取

通过搜索完首页获取的所有的品牌信息,然后根据品牌来拼接url重复上述获取基础数据和评论的步骤即可

# 获取品牌pinpai =getpinpai('B5%E8%84%91%E6%95%B4%E6%9C%BA&pvid=e41f3b2a96d44fceb2c2cb7fbc9aa2f5')print(pinpai[:20])for item in pinpai:# 循环100页数据for i in range(1,100):url = '5%E8%84%91%E6%95%B4%E6%9C%BA&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC%20%E7%94%B5%E8%84%91%E6%95%B4%E6%9C%BA&ev=exbrand_{}%5E'.format(item)n = i*2-1url = url+"&pvid=6921761f749b4b879c08d19588c55876&page={}".format(n)savedata(getdata(url,item))print(url)

最终数据格式如下

更多问题可以在评论区提出,也可以私信

如果觉得《Python爬取商品信息 包括标题 店铺 价格 评论数量 好评数 差评数 好评率》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。