吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4378|回复: 7
收起左侧

[Python 转载] 使用python分析并提取美团店铺的评论

[复制链接]
wuse111 发表于 2021-1-14 16:52
如题 分析并爬取美团单个店铺的评论
该文章仅供交流使用,请勿非法使用,如有侵犯,请联系删帖。


一.分析
随便在首页选了一家店铺,链接我这边就不放了,这边重要的是分析过程。
打开谷歌浏览器的开发者工具,然后在包的类型那里进行筛选(红色方框标注),或者也可以在过滤器搜索我们要找的评论关键词(圆圈,这些关键词是对应筛选链接的
1.jpg
店铺页面返回的内容中并没有与评论相关的数据,推断这些评论数据不在document里面,那么可以在包的筛选中选择xhr,然后寻找跟comment有关的链接
1.jpg
可以发现找到了3条链接,分别点进去看返回数据,可以发现里面是评论的数据,返回的是json格式,那么提取方式就可以很方便,然后分析链接的一些参数,为了发现参数是否有变动,刷新了几次,对比发现除了页数,其他并没有改变,而页数的改变也是以每页10个设定
1.jpg
而其中uuid是一个不变的参数,而获取的方式是在店铺首页的返回数据中,是一个固定值
1.jpg
分析就到这里,具体实现情况在下面代码
二.代码
[Python] 纯文本查看 复制代码
import requests
import time


def timeStamp(timeNum):
    timeStamp = float(timeNum) / 1000
    timeArray = time.localtime(timeStamp)
    otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    return otherStyleTime

def get_comments(url):
    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
    }
    #提取店铺id
    shop_id = url.split("/")[-1]
    #应对在链接后面有/的情况
    if shop_id == "":
        shop_id = url.split("/")[-2]
    session = requests.session()
    #关闭长链接,也可以在headers里面加上Connection: close
    session.keep_alive = False
    res = session.get(url, headers=headers)
    #提取店铺首页返回的cookie值,提取方式有很多,网上有介绍,我这里是直接通过方法转为字典
    cookie = res.cookies.get_dict()
    #然后利用for循环取出,后面range是设定页数,这个店铺有995页
    error_count = 0
    comment_list = []
    for i in range(995):
        comment_url = f"https://www.meituan.com/meishi/api/poi/getMerchantComment?uuid=060423b2a0b04ed3a54d.1610609373.1.0.0&platform=1&partner=126&originUrl=https%3A%2F%2Fwww.meituan.com%2Fmeishi%2F{shop_id}%2F&riskLevel=1&optimusCode=10&id={shop_id}&userId=&offset={i * 10}&pageSize=10&sortType=1"
        #返回的数据是json格式,那么直接返回json,然后进行提取
        time.sleep(3)
        try:
            res = session.get(comment_url, headers=headers, cookies=cookie).json()
        except Exception as e:
            error_count += 1
            res = {}
            print(f"Error:{e}")
        #出错10次,就自动跳出循环
        if res == {}:
            if error_count >= 10:
                print(f"Warning:程序出现异常")
                break
            else:
                continue
        else:
            data_list = res['data']['comments']
            for data in data_list:
                #用户名
                userName = data['userName']
                #评论内容
                comment = data['comment']
                #套餐
                menu = data['menu']
                #处理评分
                star = int(data['star']) / 10
                #转换时间
                commentTime = timeStamp(data['commentTime'])
                #其他提取的内容可自己添加
                #设定的数据提取方式也可以使用字典,这边是使用元组加列表的形式
                comment_data = userName, comment, menu, star, commentTime
                print(comment_data)
                comment_list.append(comment_data)
    return comment_list


if __name__ == '__main__':
    #"https://www.meituan.com/meishi/1467844/"
    get_comments("https://www.meituan.com/meishi/1467844/")


免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
gaothink + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

saylovese7en 发表于 2021-1-14 17:00
提取后 啥作用 没懂啊
xjshuaishuai 发表于 2021-1-14 17:16
xinyangtuina 发表于 2021-1-14 17:29
hobor 发表于 2021-1-14 19:50
学习了,谢谢分享!
angel126 发表于 2021-1-15 00:19
有没有爬商家信息 名称 地址  联系方式的?
13169796717 发表于 2021-2-16 04:45
angel126 发表于 2021-1-15 00:19
有没有爬商家信息 名称 地址  联系方式的?

我有可以大家好参考
425372937 发表于 2021-5-30 14:20
有没有成品啊😁
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表