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

本文涉及的产品
Elasticsearch Serverless检索通用型,资源抵扣包 100CU*H
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 通过自动化工具抓取马蜂窝旅游数据,分析杭州热门景点与用户关注焦点,生成排行榜和词云图。项目采用低成本方案,结合Playwright模拟浏览器行为采集信息,并用Python处理数据、绘制图表。结果显示西湖、灵隐寺等为热门景点,游客多关注门票、交通等问题。此方法简单高效,适合个性化旅行攻略分析。

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


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

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

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

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

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


我的目标很简单

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

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

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


用什么方法搞这些数据?

我做的事,大致是这样:

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

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


实际代码片段

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

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. 词云图:分析大家关心的问题关键词。

代码如下:

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. 后续还可以加入内容摘要、评论情感分析等模块,做成小型推荐系统。

总结

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

相关文章
|
18天前
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
516 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
5天前
|
Java 测试技术 微服务
最新技术栈下 Java 面试高频技术点实操指南详解
本指南结合最新Java技术趋势,涵盖微服务(Spring Cloud Alibaba)、响应式编程(Spring WebFlux)、容器化部署(Docker+Kubernetes)、函数式编程、性能优化及测试等核心领域。通过具体实现步骤与示例代码,深入讲解服务注册发现、配置中心、熔断限流、响应式数据库访问、JVM调优等内容。适合备战Java面试,提升实操能力,助力技术进阶。资源链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)
60 24
|
1月前
|
缓存 JavaScript PHP
斩获开发者口碑!SnowAdmin:基于 Vue3 的高颜值后台管理系统,3 步极速上手!
SnowAdmin 是一款基于 Vue3/TypeScript/Arco Design 的开源后台管理框架,以“清新优雅、开箱即用”为核心设计理念。提供角色权限精细化管理、多主题与暗黑模式切换、动态路由与页面缓存等功能,支持代码规范自动化校验及丰富组件库。通过模块化设计与前沿技术栈(Vite5/Pinia),显著提升开发效率,适合团队协作与长期维护。项目地址:[GitHub](https://github.com/WANG-Fan0912/SnowAdmin)。
256 5
|
15天前
|
存储 自然语言处理 算法
基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案
本文探讨了在构建对话系统时如何通过一种内存高效算法降低大语言模型(LLM)的Token消耗和运营成本。传统方法中,随着对话深度增加,Token消耗呈指数级增长,导致成本上升。
83 7
基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案
|
25天前
|
消息中间件 数据采集 人工智能
体育直播网站如何实现实时数据
体育直播中的实时数据如何快速、准确地传递到用户手机上?本文揭秘了这一过程:数据来源包括官方合作伙伴和AI+人工双保险;传输借助WebSocket、MQTT协议及CDN加速;高并发通过Redis缓存、消息队列与自动扩容解决。未来,AI+5G将推动实时数据向更低延迟发展,甚至实现赛事预测。代码示例展示了比赛数据处理逻辑,确保用户获得精准信息。
|
7天前
|
资源调度 运维 Serverless
ES Serverless 8.17王牌发布:向量检索「火力全开」,智能扩缩「秒级响应」!
阿里云 Elasticsearch Serverless 检索增强型8.17版本在最新特性扩展、自动扩缩性能、资源成本优化三大维度实现全面跃升,本文将深度解析该版本通过工程优化带来的核心能力升级。
ES Serverless 8.17王牌发布:向量检索「火力全开」,智能扩缩「秒级响应」!
|
1月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
2月前
|
人工智能 自动驾驶 物联网
5G到底有多牛?一文看懂它的原理与优势!
5G到底有多牛?一文看懂它的原理与优势!
193 19
|
3月前
|
存储 机器学习/深度学习 数据建模
数据建模入门指南:从懵懂小白到高手的第一步
数据建模入门指南:从懵懂小白到高手的第一步
355 15
|
4月前
|
机器学习/深度学习 人工智能 缓存
探秘 DeepSeek:那些你必须了解的事
DeepSeek是一家由中国幻方量化支持的创新型AI公司,专注于开发高性能、低成本的大语言模型。其独特的技术路径打破了参数规模、能耗成本和认知可靠性之间的“三元悖论”,实现了在单张显卡上运行170亿参数模型的突破。DeepSeek通过开源策略和高性价比模型(如DeepSeek-R1),大幅降低了AI应用门槛,推动了全球开发者社区的发展。其应用场景广泛覆盖教育、医疗、金融等领域,显著提升了工作效率和服务质量。DeepSeek的成功不仅在于技术创新,更在于其开放合作的理念,正引领AI行业的新变革。
168 9
探秘 DeepSeek:那些你必须了解的事