前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据可视化实战:如何采集并分析马蜂窝上的热门旅游信息?

数据可视化实战:如何采集并分析马蜂窝上的热门旅游信息?

原创
作者头像
jackcode
发布于 2025-06-11 03:02:04
发布于 2025-06-11 03:02:04
10200
代码可运行
举报
文章被收录于专栏:爬虫资料爬虫资料
运行总次数:0
代码可运行
爬虫代理
爬虫代理

想知道大家都在杭州去哪玩?不如试试自己动手搞点数据来看看——我最近就尝试了一种低成本的数据抓取+图表分析方案,整个过程还挺有趣的,分享给你。


旅行越来越个性化,但信息太散怎么办?

大家应该也有这种感觉吧,现在出去旅游,做攻略几乎成了“信息大战”——去哪玩?怎么玩?值不值得?网上各种推荐、评论、问答混在一起,有时候看得头都大了。

我比较好奇的是:这些攻略信息到底有没有共性?

比如:

  • 是不是总有那么几个地方被大家反复提起?
  • 游客最关心的问题,到底是“交通”、“门票”还是“吃住”?

带着这些问题,我想试着从某个旅游社区采集一批数据,做个小分析。我选了马蜂窝,因为它的用户内容还算丰富。


我的目标很简单

输入一个关键词,比如“杭州”,我想获取:

这个城市的热门景点列表; 一些相关的旅游攻略标题; 用户在问答区都讨论了啥问题;undefined最后,做成两个图:一个热门景点排行图,一个关键词词云图

说白了,就是试着还原一下大家对“杭州”这个目的地的关注重点。


用什么方法搞这些数据?

我做的事,大致是这样:

  1. 用自动浏览器(有点像我们手动点网页)去打开马蜂窝;
  2. 模拟用户在搜索框中输入“杭州”;
  3. 等待网页加载后,读取页面中呈现的景点信息;
  4. 把每个景点的标题、链接保存下来;
  5. 用简单的分类方式存储数据;
  6. 最后做个小分析。

为了防止访问太频繁被限制,我还加了网络代理(可以让网站误以为每次访问都来自不同网络环境)和浏览器模拟参数,尽量让这套访问方式显得“像人”。


实际代码片段

下面是我写的部分示例代码,主要逻辑就是通过 Playwright 实现浏览器行为,采集景点卡片中的标题和链接。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import asyncio
from playwright.async_api import async_playwright
import json
import os

# 网络代理配置(参考亿牛云爬虫代理示例)
PROXY_SERVER = "http://proxy.16yun.cn:3100"
PROXY_USERNAME = "16YUN"
PROXY_PASSWORD = "16IP"

KEYWORD = "杭州"

os.makedirs("mafengwo_data", exist_ok=True)

async def run():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        context = await browser.new_context(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/114.0.0.0 Safari/537.36",
            proxy={
                "server": PROXY_SERVER,
                "username": PROXY_USERNAME,
                "password": PROXY_PASSWORD
            }
        )

        page = await context.new_page()
        await page.goto("https://www.mafengwo.cn/")
        await page.context.add_cookies([{
            'name': 'mfw_uuid', 'value': 'example-uuid', 'domain': '.mafengwo.cn', 'path': '/'
        }])

        # 输入关键词并搜索
        await page.fill('input[id="search-input"]', KEYWORD)
        await page.click('div.search-btn')
        await page.wait_for_timeout(3000)

        # 提取搜索结果中的景点卡片
        scenic_cards = await page.locator('div[class*="list_mod"]').all()
        results = []

        for card in scenic_cards:
            title = await card.locator('h3').inner_text()
            link = await card.locator('a').get_attribute('href')
            results.append({
                "景点": title.strip(),
                "链接": f"https://www.mafengwo.cn{link}" if link.startswith('/') else link
            })

        # 保存每个景点信息为JSON文件
        for r in results:
            filename = os.path.join("mafengwo_data", f"{r['景点']}.json")
            with open(filename, "w", encoding="utf-8") as f:
                json.dump(r, f, ensure_ascii=False, indent=2)

        await browser.close()

asyncio.run(run())

数据分析和图形展示

我对采集到的内容做了两种可视化:

  1. 柱状图:展示热门景点 Top10;
  2. 词云图:分析大家关心的问题关键词。

代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import os
import json
import matplotlib.pyplot as plt
from collections import Counter
from wordcloud import WordCloud

files = os.listdir("mafengwo_data")
scenic_counts = Counter()
qa_keywords = Counter()

for file in files:
    with open(os.path.join("mafengwo_data", file), "r", encoding="utf-8") as f:
        data = json.load(f)
        scenic_counts[data["景点"]] += 1
        # 模拟关键词统计(实际可根据内容语义提取)
        qa_keywords.update(["交通", "门票", "住宿", "路线"])

# 热门景点Top10
plt.figure(figsize=(10, 5))
names, counts = zip(*scenic_counts.most_common(10))
plt.bar(names, counts, color='skyblue')
plt.title("热门景点排行")
plt.ylabel("次数")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("hot_scenic.png")
plt.close()

# 关键词词云图
wc = WordCloud(font_path="msyh.ttc", background_color="white", width=800, height=400)
wc.generate_from_frequencies(qa_keywords)
wc.to_file("qa_wordcloud.png")

分析结果和一些观察

景点热度排行

图中可以看到,“西湖”、“灵隐寺”、“千岛湖”等依然是大家最常提及的地点。说明即使有很多小众路线,经典景区依然占据C位。

大家最关心什么?

从词云可以看出,“门票”、“交通”、“住宿”频率较高。这印证了游客在出行前的核心关注点还集中在实用信息上。


我的几点思考

  1. 用自动浏览+代理模拟的方式,其实比想象中稳定,尤其适合这种信息量大但结构变化快的页面;
  2. 数据量虽然不大,但已经能观察到一些趋势,非常适合用来做数据故事;
  3. 后续还可以加入内容摘要、评论情感分析等模块,做成小型推荐系统

总结

通过一个小型“杭州”旅游信息采集与分析项目,我初步验证了用浏览器模拟访问配合简单图表工具,可以完成信息抓取和洞察分析。不需要动用复杂框架,依靠灵活组合也能产出有价值的分析图表。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
网页工具 | 综合计算分析确定了在癌细胞和T细胞中具有双重作用的治疗靶点
图片说明◉ 图1。ICRAFT的特征(A)ICRAFT整合了来自90项独立研究的168个体内和390个体外免疫相关筛选比较,以及来自83个队列的200万单细胞基因表达数据集和来自18个ICB试验队列的943名患者的RNA-seq数据。(B)癌症细胞扰动筛选比较的分解。(C)免疫细胞扰动筛选比较的分解。(D)83个scRNA-seq数据集概述。(E)临床试验参与者中943名患者在免疫治疗前的RNA-seq样本概述。另请参见图S1和表S1、S2和S3。◉ 图1。ICRAFT的特征(A)ICRAFT整合了来自90项独立研究的168个体内和390个体外免疫相关筛选比较,以及来自83个队列的200万单细胞基因表达数据集和来自18个ICB试验队列的943名患者的RNA-seq数据。(B)癌症细胞扰动筛选比较的分解。(C)免疫细胞扰动筛选比较的分解。(D)83个scRNA-seq数据集概述。(E)临床试验参与者中943名患者在免疫治疗前的RNA-seq样本概述。另请参见图S1和表S1、S2和S3。◉ 图1。ICRAFT的特征(A)ICRAFT整合了来自90项独立研究的168个体内和390个体外免疫相关筛选比较,以及来自83个队列的200万单细胞基因表达数据集和来自18个ICB试验队列的943名患者的RNA-seq数据。(B)癌症细胞扰动筛选比较的分解。(C)免疫细胞扰动筛选比较的分解。(D)83个scRNA-seq数据集概述。(E)临床试验参与者中943名患者在免疫治疗前的RNA-seq样本概述。另请参见图S1和表S1、S2和S3。◉ 图1。ICRAFT的特征(A)ICRAFT整合了来自90项独立研究的168个体内和390个体外免疫相关筛选比较,以及来自83个队列的200万单细胞基因表达数据集和来自18个ICB试验队列的943名患者的RNA-seq数据。(B)癌症细胞扰动筛选比较的分解。(C)免疫细胞扰动筛选比较的分解。(D)83个scRNA-seq数据集概述。(E)临床试验参与者中943名患者在免疫治疗前的RNA-seq样本概述。另请参见图S1和表S1、S2和S3。◉ 图1。ICRAFT的特征(A)ICRAFT整合了来自90项独立研究的168个体内和390个体外免疫相关筛选比较,以及来自83个队列的200万单细胞基因表达数据集和来自18个ICB试验队列的943名患者的RNA-seq数据。(B)癌症细胞扰动筛选比较的分解。(C)免疫细胞扰动筛选比较的分解。(D)83个scRNA-seq数据集概述。(E)临床试验参与者中943名患者在免疫治疗前的RNA-seq样本概述。另请参见图S1和表S1、S2和S3。
生信菜鸟团
2025/05/09
1360
网页工具 | 综合计算分析确定了在癌细胞和T细胞中具有双重作用的治疗靶点
2021华为杯数学建模B题完整思路+部分代码
问题 1. 使用附件 1 中的数据,按照附录中的方法计算监测点 A 从 2020 年 8 月 25 日到 8 月 28 日每天实测的 AQI 和首要污染物,将结果按照附录“AQI 计算结 果表”的格式放在正文中。 问题一就是单纯的计算问题,在附录中相关的计算规则都已经告知了,因此直接 带入数据进行计算即可,但需要注意各种逻辑关系,先捋顺在去计算。注意如果 计算结果过长就只选择部分代表性数据放在正文中即可,其它的部分放在附录 里。 问题 2. 在污染物排放情况不变的条件下,某一地区的气象条件有利于污染物扩 散或沉降时,该地区的 AQI 会下降,反之会上升。使用附件 1 中的数据,根据 对污染物浓度的影响程度,对气象条件进行合理分类,并阐述各类气象条件的特 征。 针对问题二,根据附件一可知,仅告诉我们检测点 A 的各类实测污染物数据, 但并未告知气象情况,因此我们首先根据问题一计算得到的 AQI 数据以及相关 的污染物数据进行无监督聚类,无监督聚类模型有很多,如层次聚类、高斯混合 聚类等,在这里比较推荐 SOM 自组织神经网络聚类算法,将原始数据输入网络 后能够自动根据各类数据的特点在不同的步数下生成不同的结果,如将 31 个省 市的 GDP 数据输入网络则会自动对发达程度进行聚类; % 二维自组织特征映射网络设计 % 输入数据为各类实测污染物数据 clc clear close all %--------------------------------------------------- %随机生成 100 个二维向量,作为样本,并绘制出其分布 P=[此处填写污染物数据] % %建立网络,得到初始权值 net=newsom([0 1;0 1],[5 6]); w1_init=net.iw{1,1}; %--------------------------------------------------- %绘制出初始权值分布图 figure(2); plotsom(w1_init,net.layers{1}.distances) %--------------------------------------------------- %分别对不同的步长,训练网络,绘制出相应的权值分布图 for i=10:30:100 net.trainParam.epochs=i; net=train(net,P); figure(3); plotsom(net.iw{1,1},net.layers{1}.distances) end %--------------------------------------------------- 问题 3. 使用附件 1、2 中的数据,建立一个同时适用于 A、B、C 三个监测点(监 测点两两间直线距离>100km,忽略相互影响)的二次预报数学模型,用来预测 未来三天 6 种常规污染物单日浓度值,要求二次预报模型预测结果中 AQI 预报 值的最大相对误差应尽量小,且首要污染物预测准确度尽量高。并使用该模型预 测监测点 A、B、C 在 2021 年 7 月 13 日至 7 月 15 日 6 种常规污染物的单日浓度 值,计算相应的 AQI 和首要污染物,将结果依照附录“污染物浓度及 AQI 预测 结果表”的格式放在论文中。 首先分析题目已知数据包括了各监测点逐小时污染物浓度和气象一次预报数据 以及实测的污染物浓度和气象数据等;这里就是利用实测数据对预报数据进行误 差修正,既然是预测,那实测数据在未来肯定是无法得到的,所以思路就是通过 前期的预测数据和实测数据的差,找到相关的误差修正规律即可;因此在这里推 荐的模型是神经网络模型,具体是设置一个三层的网络机构,输入层数据是一次 预报的气象条件,而标准输出数据为真实污染物浓度与预测污染物浓度的差值, 这样就建立了预测气象条件与实际污染物浓度误差之间的关系;在这里推荐使用 基于遗传算法优化的神经网络模型,相对于传统的 BP 神经网络而言,其精度将 会更高。得到上述网络关系后,若新得到一组一次预报气象数据结合相关的误差 变量进行二次修正即可。 %程序一:GA 训练 BP 权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对 BP 网络权值阈值进行优化,再用 BP 算法训练网络 %--------------------------------------------------------------------------
川川菜鸟
2021/10/19
1.9K0
实时定位系统(RTLS)在嵌入式导航与物流中的代码应用实战
实时定位系统(RTLS)是一种通过技术手段实现对目标实时位置信息获取的系统。在嵌入式系统领域,RTLS的应用已经逐渐成为关键技术,特别是在导航与物流领域。本文将探讨RTLS在嵌入式导航与物流中的应用,并通过代码实例展示其在实际项目中的运用。
一键难忘
2023/12/12
4760
物联网知识科普(4)——室内实时定位技术及原理
RTLS即 Real Time Location Systems的简称,实时定位系统。
物流IT圈
2019/07/16
5.3K0
物联网知识科普(4)——室内实时定位技术及原理
AIOps在美团的探索与实践——故障发现篇
AIOps,最初的定义是Algorithm IT Operations,是利用运维算法来实现运维的自动化,最终走向无人化运维。随着技术成熟,逐步确定为Artificial Intelligence for IT Operations——智能运维,将人工智能应用于运维领域,基于已有的运维数据(日志、监控信息、应用信息等),通过机器学习的方式来进一步解决自动化运维无法解决的问题。
美团技术团队
2020/11/03
1.3K0
AIOps在美团的探索与实践——故障发现篇
论文复现---基于随机蕨的快速相位差DOA估计
信号的到达方向(DOA)信息在通信、定位、目标跟踪等方面具有重要意义。基于频域的时延估计能够在子样本精度下获得DOA;然而,它受到相位包裹问题的困扰。本文提出了一种基于频率分集的方法来克服相位包裹问题。受机器学习技术的随机蕨启发,提出了一种加快搜索过程的算法。通过仿真和实验测试,基于三种不同的信号模型对算法的性能进行了评估。结果表明,在保持相同精度的情况下,使用随机蕨可以将搜索时间减少到穷尽法搜索时间的1/6。该算法的DOA估计误差较低,优于基于频分集的基准算法。
不去幼儿园
2024/12/03
1450
论文复现---基于随机蕨的快速相位差DOA估计
最全总结【时间序列】时间序列的预处理和特征工程
时间序列(Time Series)是按时间顺序排列的一组数据点,通常用于描述和分析随时间变化的现象。时间序列数据在许多领域中都有广泛应用,如金融市场、气象学、经济学、医学等。
机器学习司猫白
2025/01/21
1.1K0
最全总结【时间序列】时间序列的预处理和特征工程
机器视觉工业缺陷检测(光源,相机,镜头,算法)
视觉工业检测大体分为工件尺寸测量与定位,和表面缺陷检测,及各种Logo标识的检测与识别等。
机器学习AI算法工程
2021/10/14
18.8K0
机器视觉工业缺陷检测(光源,相机,镜头,算法)
五万字总结,深度学习基础。「建议收藏」
人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。神经网络类型众多,其中最为重要的是多层感知机。为了详细地描述神经网络,我们先从最简单的神经网络说起。
全栈程序员站长
2022/08/31
1.1K0
五万字总结,深度学习基础。「建议收藏」
CTPN论文翻译——中文版
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书
Tyan
2019/05/25
1.4K0
Cell | 健康与疾病中 53,026 名成人的血浆蛋白质组图谱 | 提供结果数据和源代码
生信菜鸟团
2025/01/16
4420
Cell | 健康与疾病中 53,026 名成人的血浆蛋白质组图谱 | 提供结果数据和源代码
Python 无监督学习实用指南:1~5
在本章中,我们将介绍基本的机器学习概念,即 ,前提是您具有一些统计学习和概率论的基本知识 。 您将了解机器学习技术的使用以及逻辑过程,这些逻辑过程将增进我们对数据集的性质和属性的了解。 整个过程的目的是建立可支持业务决策的描述性和预测性模型。
ApacheCN_飞龙
2023/04/24
1.3K0
Python 无监督学习实用指南:1~5
NASA数据集—— 2017 年 7 月和 2018 年 7 月期间从阿拉斯加育空-库斯科金(Y-K)三角洲高地苔原火灾历史梯度的 43 个地块收集的生态野外数据
ABoVE: Vegetation Composition across Fire History Gradients on the Y-K Delta, Alaska
此星光明
2024/04/02
1080
NASA数据集—— 2017 年 7 月和 2018 年 7 月期间从阿拉斯加育空-库斯科金(Y-K)三角洲高地苔原火灾历史梯度的 43 个地块收集的生态野外数据
细胞图谱 | Nature | 人类胚胎骨骼发育的多组学图谱
生信菜鸟团
2024/12/27
3560
细胞图谱 | Nature | 人类胚胎骨骼发育的多组学图谱
EEG频谱模式相似性分析:实用教程及其应用(附代码)
人脑通过神经激活模式编码信息。虽然分析神经数据的常规方法侧重对大脑(去)激活状态的分析,但是多元神经模式相似性有助于分析神经活动所代表的信息内容。在成年人中,已经确定了许多与表征认知相关的特征,尤其是神经模式的稳定性、独特性和特异性。然而,尽管随着儿童时期认知能力的增长,表征质量也逐步提高,但是发育研究领域特别是在脑电图(EEG)研究中仍然很少使用基于信息的模式相似性方法。在这里,我们提供了一个全面的方法介绍和逐步教程——频谱脑电图数据的模式相似性分析,包括一个公开可用的资源和样本数据集的儿童和成人的数据。
悦影科技
2022/07/11
1.1K0
Nat. Commun. | TRAPT:融合多阶段深度学习的大规模表观基因组调控因子预测框架
疾病发生和进展的特异性研究中,识别调控转录因子(TRs)仍具有挑战性,这些因子通过调控元件和表观基因组信号控制基因表达。大规模多组学表观基因组数据的引入,为解析调控元件及其调控因子的复杂模式提供了可能。研究人员在此提出TRAPT,一个多模态深度学习框架,可通过学习和整合靶基因的顺式调控元件及全基因组结合位点的调控潜能,推断转录因子的活性。在570个与TR相关的数据集上,TRAPT在预测转录因子,尤其是协同因子和染色质调控因子方面优于现有方法。此外,该方法成功识别出与疾病、遗传变异、细胞命运决策及组织相关的关键转录因子,展现了基于表观组数据识别TRs的全新视角。
DrugAI
2025/04/22
1530
Nat. Commun. | TRAPT:融合多阶段深度学习的大规模表观基因组调控因子预测框架
关于什么是单细胞测序的知识整理,ChatGPT会做的更好吗?
既然ChatGPT如此擅长查询和整理资料,那么关于什么是单细胞测序的知识整理,ChatGPT会做的更好吗?我先给出来一个学徒的知识整理,借花献佛给大家。然后大家可以自己玩一下ChatGPT,看看能不能做出来如此出色的整理。
生信技能树
2023/02/27
9400
关于什么是单细胞测序的知识整理,ChatGPT会做的更好吗?
R语言︱异常值检验、离群点分析、异常值处理
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/51210793
悟乙己
2019/05/27
5.5K0
Yolov8 源码解析(四十三)
ApacheCN_飞龙
2024/09/13
2970
NPP: 重复经颅磁刺激产生抗抑郁效果的基础:全脑功能连接与局部兴奋度变化
重复经颅磁刺激 (rTMS) 是重度抑郁症 (MDD) 常用的治疗方式,但是我们对经颅磁刺激产生抗抑郁效果的机制了解甚少。此外,我们也缺乏能够用以预测和追踪临床效果的大脑信号,而这些信号能够帮助进行分层与优化治疗。本研究中,我们进行了随机、假性对照的临床试验,在rTMS前后分别测量电生理、神经成像和临床变化。患者(N=36)被随机分为两组,分别接受有效刺激或伪刺激的,针对左背外侧前额叶皮层(dlPFC)的rTMS干预,为期20个连续工作日。为捕捉由rTMS驱动的大脑连接与因果兴奋性上的变化,我们在干预前后均对患者进行了静息态fMRI和TMS/EEG数据采集。通过同时进行的TMS/fMRI,可以评估抑郁组与健康对照组之间大脑因果连接基线的差异。相比伪刺激组,我们发现rTMS引起了:
用户1279583
2020/04/01
1.1K0
推荐阅读
网页工具 | 综合计算分析确定了在癌细胞和T细胞中具有双重作用的治疗靶点
1360
2021华为杯数学建模B题完整思路+部分代码
1.9K0
实时定位系统(RTLS)在嵌入式导航与物流中的代码应用实战
4760
物联网知识科普(4)——室内实时定位技术及原理
5.3K0
AIOps在美团的探索与实践——故障发现篇
1.3K0
论文复现---基于随机蕨的快速相位差DOA估计
1450
最全总结【时间序列】时间序列的预处理和特征工程
1.1K0
机器视觉工业缺陷检测(光源,相机,镜头,算法)
18.8K0
五万字总结,深度学习基础。「建议收藏」
1.1K0
CTPN论文翻译——中文版
1.4K0
Cell | 健康与疾病中 53,026 名成人的血浆蛋白质组图谱 | 提供结果数据和源代码
4420
Python 无监督学习实用指南:1~5
1.3K0
NASA数据集—— 2017 年 7 月和 2018 年 7 月期间从阿拉斯加育空-库斯科金(Y-K)三角洲高地苔原火灾历史梯度的 43 个地块收集的生态野外数据
1080
细胞图谱 | Nature | 人类胚胎骨骼发育的多组学图谱
3560
EEG频谱模式相似性分析:实用教程及其应用(附代码)
1.1K0
Nat. Commun. | TRAPT:融合多阶段深度学习的大规模表观基因组调控因子预测框架
1530
关于什么是单细胞测序的知识整理,ChatGPT会做的更好吗?
9400
R语言︱异常值检验、离群点分析、异常值处理
5.5K0
Yolov8 源码解析(四十三)
2970
NPP: 重复经颅磁刺激产生抗抑郁效果的基础:全脑功能连接与局部兴奋度变化
1.1K0
相关推荐
网页工具 | 综合计算分析确定了在癌细胞和T细胞中具有双重作用的治疗靶点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档