前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)

爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)

作者头像
富泰科
发布于 2022-12-13 03:18:45
发布于 2022-12-13 03:18:45
5.1K20
代码可运行
举报
文章被收录于专栏:数据爬取数据爬取
运行总次数:0
代码可运行

作者:futaike_corp,微信同号,转载请联系作者授权。

获取大众点评网的店铺评论,我们一般有以下几个途径:1、PC端网页端;2、小程序端;3、APP端;PC端由于有字体加密,采集时需要对加密的字体进行解密,具体思路可以参考:爬虫方案 | 爬取大众点评网评论的几个思路(从PC端) – 富泰科 (futaike.net)

本篇我们尝试从小程序端来获取:

工具:

1、fiddler软件:抓包使用;

2、python

首先我们从电脑微信打开小程序,开启fiddler,定位到评论页面,我们可以看到抓取到数据包。

爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)

我们可以看到,返回的是JSON字符串,那我们拿到以后解析一下就可以了。

爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)

那么抓取思路就有了:我们可以先用fiddler把Response body全部获取下来,保存。然后再对JSON内容进行解析。

爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端

OK,我们下面就来写代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_comments(self, shop_name, file_name):
    # shop_name = self.get_info()
    # # 从response中提取数据
    self.item_list = []
    file = open(f'D:/Fiddler Sessions/dianping_pinglun_{shop_name}.txt', 'r', encoding='utf-16 LE').readlines()
    for i in file:
        # 循环
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
reviewList = reviewData['reviewList']
big_url_list = []
for review in reviewList:
    if not has_next:
        print('没有数据了,采集完成。')
    # user
    userId = review['userId']
    userNickName = review['userNickName'].replace('"', '')
    # 年月日格式化
    lastTimeStr = review['lastTimeStr']
    lasttime = review['addTime'].split('-')[0]
    lasttime = lasttime + '年' + lastTimeStr # 转成年月日格式
    # 浏览数
    browse_count = review['browseCountStr']
    # 赞数
    flower_count = review['flowerTotalStr']
    # 评论数
    follow_Note_count = review['followNoteNoStr']

这样就拿到了相关字段,评论的内容是分开的,和PC端的不一样,没有字体加密,那我们就可以直接获取了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
content = review['reviewBody']['children']
content_text = []
for item in content:
    for k, v in item.items():
        if k == 'children':
            for sub_item in v:
                text = sub_item.get('text', '').replace('\n', '。').replace('\r', '')
                content_text.append(text)

这里我们要处理一下换行符,替换一下即可。

然后,我们还要处理一下评论内容当中的表情符号,这里我们导入一个转换的模块,叫

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import emoji

使用当中的这个函数demojize:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
content = ' '.join(content_text)
content = emoji.demojize(content)

然后我们就可以将一些表情符号转为字符了。

爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)

我们先尝试抓取一下,打印一下,OK,没有问题。

下面再来处理一下翻页,翻页参数需要用到很多的加密参数,美团对这块实在是用力,我们小白用户偶尔抓一次数据,哪有这个能力去破解这么多的加密呢?

爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端

看看这么长的加密参数,是不是就头大了。那我们小白就干脆不理它,还不行吗?不让我们使用参数翻页,我们就笨一些,咱们手动翻页不就得了。

下面我们就请出python库当中的另一个模块,pyautogui,让它帮我们去滚动小程序页面,翻页加载。

我们的思路是运行以后让鼠标自动跑到小程序界面,然后再滚动向下,进行翻页,一直翻到没有数据为止。这里我们首先要在小程序上截一个图,让模块在程序运行时比对这个图,找到小程序对应的位置,然后再滚动,滚动的次数我们可以根据评论的最大页数以及每次加载的条数来计算一下,给一个最大的滚动次数。还可以加一个break条件来终止这个循环,比如滚动到最后有一个,没有更多数据的提示,那我们就可以使用这个来作为循环停止的条件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def scroll_down(self, max_num):  # 滚动加载评论内容。
    # 辅助滚动
    max_pages = max_num / 10
    # 找到小程序中心坐标
    location = pyautogui.locateOnScreen(
        r'C:/Users/Administrator/Pictures/futaike.net_1211_213052.jpg')
    print('小程序坐标:', location)
    loc = pyautogui.center(location)  # 找到图片的中心,返回的是元组
    pyautogui.PAUSE = 5  # 暂停5

我们定义一个滚动函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 循环滚动
page = 0
while True:
    for i in range(4):  # 循环滚动
        pyautogui.scroll(-1500)
    pyautogui.PAUSE = 1  # 暂停1秒
    page += 1
    try:
        stop_loc = pyautogui.locateOnScreen(
            r'C:/Users/Administrator/Pictures/futaike.net_1212_105822.jpg')
        stop_flag = pyautogui.center(stop_loc)
    except Exception as e:
        stop_flag = ()
    if stop_flag:
        break
    if page > max_pages * 2:
        break
    print(page)

这样我们就解决了翻页的大问题。下面就是获取数据,然后解析保存了。

保存格式可以使用excel的xlsx,或csv等,如果csv需要对换行符以及,半角字符进行预处理一下。这些都比较简单,使用replace替换一下即可。

当然,这里我们还要可以考虑重复数据的去重,可以使用以下的列表去重函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 去除列表当中的重复值
item_list = []
for r in range(len(item_list) - 1, -1, -1):
    # 比较
    for c in range(r):
        if item_list[r] == item_list[c]:
            del item_list[r]

然后再将去重后的数据导出(以xlsx示例):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.item_list.append([shop_name, UUid, str(reviewTotalCount), str(userId),
                       userNickName,
                       lasttime, content, str(star), avgPrice,
                       str(flower_count),
                       str(follow_Note_count)])
xlsxwriter.excel_save(f'{file_path}/{shop_name}_大众点评评论.xlsx', self.item_list, self.excel_head)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)

然后我看所有的表情符号也都转为字符了。

爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)
爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端)

好了,以上就是我们从小程序端抓取点评评论的全部思路及实施过程。

作者:futaike_corp,微信同号,转载请联系作者授权。

原出处:爬虫方案 | 爬取大众点评网评论的几个思路(从小程序端) – 富泰科 (futaike.net)

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
留个联系方式请教一下
留个联系方式请教一下
11点赞举报
wx:tanchichong1
wx:tanchichong1
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Python爬虫 | 以滑雪为例演示大众点评商铺信息采集
冬天是一个适合滑雪的季节,但是滑雪需谨慎,比如初学者就不要上高级道,能不能滑心里要有点哔数。
可以叫我才哥
2021/08/05
1.3K0
爬虫入门经典(二十一) | 破解CSS加密之爬取大众点评
在上篇文章中我们已经讲了js加密,这个需要使用者有基本的js阅读和调试能力。但是不一定都解决所有问题,不过可以提供这样的流程和思路。
不温卜火
2020/11/24
2.1K2
爬虫入门经典(二十一) | 破解CSS加密之爬取大众点评
使用requests来爬取大众点评
在工作生活中,发现越来越多的人对大众点评的数据感兴趣,而大众点评的反爬又是比较严格的。采取的策略差不多是宁可错杀一万,也不放过一个。有的时候正常浏览都会跳出验证码。
周小董
2019/03/29
1.8K0
使用requests来爬取大众点评
使用 Python破解大众点评字体加密(SVG反爬虫)
前言 大众点评拥有大量高质量评论信息、种草信息,同时也有非常严格的反爬虫机制。 今天我们一起使用 Python破解大众点评字体加密,获取极具商业价值的信息。 本文知识点: requests 的使用 x
松鼠爱吃饼干
2020/09/15
1.5K0
使用 Python破解大众点评字体加密(SVG反爬虫)
字体反爬之大众点评
大众点评的美食评论是大家平时选择吃饭地点的一种参考,通过他人品尝的经验来进行选择。今天就来爬一下大众点评吧~
老肥码码码
2020/01/17
1.7K0
字体反爬之大众点评
爬虫进阶 | 点评网的反爬再也不是烦恼
文章之前:其实做爬虫并不难,但难的是一些反爬,每个爬虫师都有要与反爬师做斗争,所以很多时候,爬虫易学难精就是这个缘故,你不知道那天工程师又弄出一种新的反爬策略,无止无尽的斗争让人身心交瘁.
龙哥
2018/12/24
6640
爬虫进阶 | 点评网的反爬再也不是烦恼
老司机教你用Python爬大众点评(上期)
古人云:工欲善其事,必先利其器。一般网络爬虫,比较经典的几个库是必须的,例如:lxml、 requests、 BeautifulSoup,先甭说其他的,先装吧
tyrantlucifer
2022/03/23
6K0
老司机教你用Python爬大众点评(上期)
老司机教你用Python爬大众点评(下期)
直接标签换成了 textPath,同时坐标也是令人费解,x坐标是跟第一种那样计算,没有更改,但是这个y坐标却该如何进行对应?
tyrantlucifer
2022/03/23
1.2K0
老司机教你用Python爬大众点评(下期)
大众点评字体加密破解
从这段 css 可以看出,class="num"的标签,指定了字体库地址,猜测大概率是使用了所谓的字体加密。为了验证猜想,我们需要看下研究这个字体文件
Java宝典
2021/01/14
1.7K0
大众点评字体加密破解
爬虫网络请求之JS解密二(大众点评)
之前在做大众点评网数据的时候,发现数据在前端显示是用标签来替换。这样爬虫采集到的就是一堆标签加一点内容所混杂的脏数据,同时发现标签中的值也是随时改变的。所以这次也是花了一点时间来整理关于大众点评JS加密的内容,给大家简单讲解一下,以此来学习借鉴如何有效安全的防范爬虫。仅供学习参考,切勿用于商业用途
用户1073093
2019/07/04
2K0
(数据科学学习手札56)利用机器学习破解大众点评文字反爬
  爬取过大众点评的朋友应该会遇到这样的问题,在网页中看起来正常的文字,在其源代码中变成了下面这样:
Feffery
2019/04/01
6140
(数据科学学习手札56)利用机器学习破解大众点评文字反爬
端智能在大众点评搜索重排序的应用实践
总第490篇 2022年 第007篇 端智能,是指在移动端设备运行人工智能(AI)应用的技术。本文主要讲述大众点评搜索场景下,在端侧部署大规模深度学习模型进行搜索重排序任务的实践方案,包括端上特征工程、模型迭代思路,以及具体部署优化的过程,希望能对从事相关领域开发的同学有所帮助或者启发。 1 引言 2 排序系统进阶:为什么需要端上重排 2.1 云端排序痛点 2.2 端智能重排流程和优势 3 端上重排序算法探索与实践 3.1 特征工程 3.2 用户反馈行为序列建模 3.3 重排模型设计 3.4 多场景应用效
美团技术团队
2022/03/04
1.2K0
端智能在大众点评搜索重排序的应用实践
2022年02月24日 作者: 祝升 刘哲 汤彪 文章链接 12434字 25分钟阅读
用户3839453
2022/03/01
6430
破解点评网字体反爬,深入挖掘系统背后的原理
从这里可以看到,网页上显示的文字和源码中显示的文字有些出入,并不是一一对应,那继续查看sources中的代码。
州的先生
2019/08/23
9820
破解点评网字体反爬,深入挖掘系统背后的原理
python爬虫 senlenium爬取拉勾网招聘数据
用selenium爬虫实现,输入任意关键字,比如 python 数据分析,点击搜索,得到的有关岗位信息,爬取下来保存到Excel。
叶庭云
2020/09/17
1.5K0
python爬虫   senlenium爬取拉勾网招聘数据
大众点评搜索基于知识图谱的深度学习排序实践
本文介绍了大众点评搜索核心排序层模型的演化之路,包括结合知识图谱信息构建适合搜索场景的Listwise深度学习排序模型LambdaDNN以及特征工程实践和相关工具建设。
美团技术团队
2019/03/22
9100
大众点评搜索基于知识图谱的深度学习排序实践
相关推荐
Python爬虫 | 以滑雪为例演示大众点评商铺信息采集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档