HTML应用指南:利用GET请求获取微博签到位置信息
在当今数字化时代,社交媒体平台已成为人们日常生活中不可或缺的一部分。作为中国最受欢迎的社交平台之一,微博不仅为用户提供了一个分享信息、表达观点的空间,还通过其丰富的功能如签到服务,让用户能够记录自己生活中的点点滴滴。这些由用户生成的数据蕴含着巨大的价值,无论是对于学术研究、市场营销还是个人兴趣探索而言。然而,获取并分析这些数据并非易事。微博签到数据的收集通常需要面对诸如数据量庞大、结构复杂以及访问权限等挑战。随着Python编程语言及其相关库(如Requests、BeautifulSoup、Selenium等)的发展,开发者现在拥有了一系列强大的工具来构建网络爬虫,从而自动抓取网页内容,从中提取所需的信息。
本文将探讨如何利用GET请求从微博API或网页上获取用户的签到数据,并展示使用Python的requests库发送GET请求的方法,以提取详细的用户签到位置信息。关键词地点的签到记录,并通过解析JSON格式的数据或HTML页面来处理响应数据。我们关注的是微博平台上用户的活动足迹及其地理分布情况。这种做法有助于我们更深入地了解微博用户的社交行为模式、偏好变化趋势以及在不同地区的活跃度和消费趋势。通过对微博签到数据的分析,我们可以揭示出更多有价值的市场洞察和社会现象。
微博手机版网页:微博
我们第一步先找到微博签到数据的存储位置,先检索"上海",然后点击地点,选择上海,选择其他的地点或者关键词都可,这里仅做演示;
接下来,通过检索用户微博内容可以进一步发现,具体数据套了很多层级,最后发现在card_type为9的mblog里面才是用户发布的微博;
然后,看3个关键部分标头、负载、 预览;
标头:通常包括URL的连接,也就是目标资源的位置;
负载:对于GET请求:负载通常包含了传递的参数,这里我们可以看到它的传参包括,位置关键词、页码,还是明文,没有进行加密;
预览:指的是对响应内容的快速查看或摘要显示,可以帮助用户快速了解返回的数据结构或内容片段;
接下来就是数据获取部分,先讲一下方法思路,一共三个步骤;
方法思路
- 找到对应数据存储位置,获取所有打卡地点的相关微博发布内容;
- 通过修改MAX PAGES来调整获取页数;
- 坐标汇总并可视化,数据导入ArcGIS进行可视化;
第一步:我们先找到对应数据存储位置,这里可以通过修改页码进行遍历所有页面,"MAX PAGES= 你需要获取的页面最大值";
完整代码#运行环境 Python 3.11
# -*- coding: utf-8 -*-
import requests
import html
import re
import time
import random
import pandas as pd
from datetime import datetimeCONTAINER_ID = "100808e94e8bd35fc8144f38fd1ebc1f81ab36_-_lbs" # 填入你要爬取的地点对应的 containerid
# 最多抓取多少页
MAX_PAGES = 20
# 每次请求后随机 sleep,降低封禁风险
SLEEP_RANGE = (1, 3)def get_headers():"""构造请求头,包含随机 User-Agent 和 Referer"""ua_list = ["Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) ""AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 ""Mobile/15E148 Safari/604.1","Mozilla/5.0 (Linux; Android 10; Pixel 4 XL Build/QQ3A.200805.001) ""AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",]return {"User-Agent": random.choice(ua_list),"Referer": "https://m.weibo.cn",}def fetch_page(session, containerid, since_id=None):url = "https://m.weibo.cn/api/container/getIndex"params = {"containerid": containerid,"lcardid": "frompoi","extparam": "frompoi","luicode": "10000011","lfid": "231583"}if since_id:params["since_id"] = since_idresp = session.get(url, params=params, headers=get_headers(), timeout=10)resp.raise_for_status()return resp.json()def clean_text(raw_html: str) -> str:"""HTML 解码并去除所有标签,返回纯文本"""text = html.unescape(raw_html)return re.sub(r'<.*?>', '', text).strip()def trans_format(time_string: str) -> str:"""将微博 API 返回的时间字符串转换为 'YYYY-MM-DD HH:MM:SS' 格式。原始示例:Tue Apr 18 08:13:28 +0800 2023"""from_format = '%a %b %d %H:%M:%S +0800 %Y'to_format = '%Y-%m-%d %H:%M:%S'try:dt = datetime.strptime(time_string, from_format)return dt.strftime(to_format)except Exception:return time_stringdef parse_cards(json_data: dict) -> list:"""从一页 JSON 中提取所有 card_type==9 的用户微博(签到贴)。兼容首页(card_group)和后续页(直接 mblog)两种结构。返回列表,每项包含:用户名(user)、内容(content)、发布时间(created_at)、签到地点(location)、客户端来源(source)、地点标签(page_title) 和 地址标签(content1)"""results = []data = json_data.get("data", {}) or {}cards = data.get("cards", []) or []for card in cards:# 后续页直接 mblog;首页在 card_groupcandidates = []if card.get("mblog"):candidates.append(card)candidates.extend(card.get("card_group") or [])for entry in candidates:m = entry.get("mblog")if not m or entry.get("card_type") != 9:continue# 原始字段user_raw = m.get("user", {}).get("screen_name", "")text_html = m.get("text", "")created_raw = m.get("created_at", "")source_html = m.get("source", "")page_info = m.get("page_info", {}) or {}# 清洗与转换user = user_rawcontent = clean_text(text_html)created_at = trans_format(created_raw)source = clean_text(source_html)page_title = page_info.get("page_title", "")content1 = page_info.get("content1", "")# 提取“城市·区域”形式的签到地点loc_match = re.search(r'([\u4e00-\u9fa5]+·[\u4e00-\u9fa5]+)', content)location = loc_match.group(1) if loc_match else ""results.append({"user": user,"content": content,"created_at": created_at,"location": location,"source": source,"page_title": page_title,"content1": content1})return resultsdef main():session = requests.Session()since_id = Noneall_items = []for page in range(1, MAX_PAGES + 1):print(f"正在抓取 第 {page} 页 … since_id={since_id}")try:js = fetch_page(session, CONTAINER_ID, since_id)except Exception as e:print("请求失败,跳过:", e)breakitems = parse_cards(js)if not items:print("未获取到更多数据,结束。")breakall_items.extend(items)# 获取下一页的 since_id,不存在则停止page_info = js.get("data", {}).get("pageInfo") or {}since_id = page_info.get("since_id")if not since_id:print("since_id 未找到,结束翻页。")breaktime.sleep(random.uniform(*SLEEP_RANGE))# 保存到 CSV,并去重(含所有字段)if all_items:df = pd.DataFrame(all_items)df.drop_duplicates(subset=['user','content','created_at','location','source','page_title','content1'],inplace=True)df.to_csv("weibo_sign.csv", index=False, encoding="utf-8-sig")print(f"共抓取 {len(df)} 条签到数据(去重后),已保存到 weibo_sign.csv")else:print("未抓取到任何数据。")if __name__ == "__main__":main()
获取数据标签如下, user(用户名)、content(分布内容)、location(打卡点)、source(机型)、content1(具体地址),也可以返回内容自行增加一些标签,其他一些非关键标签,这里省略;
第三步:坐标聚类可视化,因为数据本身是一个个热门打卡点,就可以通过聚类打卡点和详细坐标的地理编码转坐标来进行可视化,和打卡热点位置分析;
这里有个几个小tips,1、如果你输入区域爬不到数据的时候,记得F12看看第二页的分页参数,把since_id改成page就可以正常爬取数据了,就像上海这里分页就是page;
2、首页是不带页码的,后续是需要页码的;
3、参数配置:CONTAINER_ID = "100808e94e8bd35fc8144f38fd1ebc1f81ab36_-_lbs" # 填入你要爬取的地点对应的 containerid,这个参数在负载里面,替换一下即可;
4、经实际测试多次跑下来结果并不一致,可能数据是实时更新的或者其他原因;
参考:Python爬取微博签到数据(2025年3月更)_微博签到打卡数据爬取-CSDN博客
文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。
相关文章:
HTML应用指南:利用GET请求获取微博签到位置信息
在当今数字化时代,社交媒体平台已成为人们日常生活中不可或缺的一部分。作为中国最受欢迎的社交平台之一,微博不仅为用户提供了一个分享信息、表达观点的空间,还通过其丰富的功能如签到服务,让用户能够记录自己生活中的点点滴滴。…...
如何检测Python项目哪些依赖库没有使用
要检测Python项目中哪些依赖库未被使用,可以采用以下方法: 1. 使用静态分析工具 vulture:静态分析工具,检测未使用的代码和导入 pip install vulture vulture your_project/pyflakes:检查未使用的导入语句 pip ins…...
数据仓库建设全解析!
目录 一、数据仓库建设的重要性 1. 整合企业数据资源 2. 支持企业决策制定 3. 提升企业竞争力 二、数据仓库建设的前期准备 1. 明确业务需求 2. 评估数据源 3. 制定项目计划 三、数据仓库建设的具体流程 1.需求分析 2.架构设计 3.数据建模 4.ETL 开发 5.…...
magic-api连接达梦数据库
引入依赖 然后手写驱动 <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.1.193</version></dependency> jdbc:dm://127.0.0.1:5236?schemaSALES...
向量检索新选择:FastGPT + OceanBase,快速构建RAG
随着人工智能的快速发展,RAG(Retrieval-Augmented Generation,检索增强生成)技术日益受到关注。向量数据库作为 RAG 系统的核心基础设施,堪称 RAG 的“记忆中枢”,其性能直接关系到大模型生成内容的精准度与…...
WHAT - 区分 Git PR 和 MR
文章目录 PR(Pull Request)MR(Merge Request)相同点总结 git pr 和 git mr 本质上都是「合并请求」的意思,但它们对应的是不同的平台术语。 PR(Pull Request) 平台:GitHub、Bitbuc…...
Axure复选框组件的深度定制:实现自定义大小、颜色与全选功能
在产品设计中,复选框作为用户与界面交互的重要元素,其灵活性直接影响到用户体验。本文将介绍如何利用Axure RP工具,通过高级技巧实现复选框组件的自定义大小、颜色调整,以及全选功能的集成,为产品原型设计增添更多可能…...
Datawhale AI春训营——用AI帮助老人点餐
详细内容见官网链接:用AI帮助老人点餐-活动详情 | Datawhale...
两段文本比对,高亮出差异部分
用法一:computed <div class"card" v-if"showFlag"><div class"info">*红色背景为已删除内容,绿色背景为新增内容</div><el-form-item label"与上季度比对:"><div class"comp…...
uniapp 仿小红书轮播图效果
通过对小红书的轮播图分析,可得出以下总结: 1.单张图片时容器根据图片像素定高 2.多图时轮播图容器高度以首图为锚点 3.比首图长则固高左右留白 4.比首图短则固宽上下留白 代码如下: <template><view> <!--轮播--><s…...
审计效率升级!快速匹配Excel报表项目对应的Word附注序号
财务审计报告一般包括:封面、报告正文、财务报表(Excel工作簿)以及对应的财务报表附注(Word文档)、事务所营业执照以及注册会计师证件。 在审计报告出具阶段,为各报表项目填充对应的Word附注序号ÿ…...
Python 中 `r` 前缀:字符串处理的“防转义利器”
# Python 中 r 前缀:字符串处理的“防转义利器” 在 Python 编程过程中,处理字符串时经常会遇到反斜杠 \ 带来的转义问题,而 r 前缀的出现有效解决了这一困扰。它不仅能处理反斜杠的转义,还在多种场景下发挥着重要作用。接下来&a…...
1️⃣6️⃣three.js_光源
16、光源 3D虚拟工厂在线体验 在 Three.js 中,环境光(AmbientLight)、点光源(PointLight)、平行光(DirectionalLight)、 聚光灯(SpotLight)、半球光(Hemisph…...
AD16如何执行DRC检测
AD16如何执行DRC检测 DRC检测主要用来查看走线是否出现通断,以及是否出现短路。 1)、点击“Tools”---“Design Rule Check…” 2)、全部勾选 3)、勾选“Electrical”中的“Batch”选项,参与DRC检测 4)、勾选“Routing”中的“Batch”选项,…...
PostgreSQL性能优化实用技巧
PostgreSQL的性能优化需从索引设计、查询调优、参数配置、硬件资源等多维度入手。以下为实战中验证有效的优化策略,适用于高并发、大数据量等场 一、索引优化:精准加速查询 1.选择正确的索引类型 BRIN索引:对按时间或数值顺…...
Vue3 ref与props
ref 属性 与 props 一、核心概念对比 特性ref (标签属性)props作用对象DOM 元素/组件实例组件间数据传递数据流向父组件访问子组件/DOM父组件 → 子组件响应性直接操作对象单向数据流(只读)使用场景获取 DOM/调用子组件方法组件参数传递Vue3 变化不再自…...
SpringBoot | 构建客户树及其关联关系的设计思路和实践Demo
关注:CodingTechWork 引言 在企业级应用中,客户关系管理(CRM)是核心功能之一。客户树是一种用于表示客户之间层级关系的结构,例如企业客户与子公司、经销商与下级经销商等。本文将详细介绍如何设计客户树及其关联关系…...
SpringCloud——负载均衡
一.负载均衡 1.问题提出 上一篇文章写了服务注册和服务发现的相关内容。这里再提出一个新问题,如果我给一个服务开了多个端口,这几个端口都可以访问服务。 例如,在上一篇文章的基础上,我又新开了9091和9092端口,现在…...
Springboot3+ JDK21 升级踩坑指南
目录 GetMapping和 RequestBody 一起使用时,会把请求方式由GET变为POST 变更默认的httpClient feign 超时配置失效 GetMapping和 RequestBody 一起使用时,会把请求方式由GET变为POST 变更默认的httpClient 添加依赖 <dependency><groupId&g…...
Qt UDP组播实现与调试指南
在Qt中使用UDP组播(Multicast)可以实现高效的一对多网络通信。以下是关键步骤和示例代码: 一、UDP组播核心机制 组播地址:使用D类地址(224.0.0.0 - 239.255.255.255)TTL设置:控制数据包传播范围(默认1,同一网段)网络接口:指定发送/接收的物理接口二、发送端实现 /…...
idea连接远程服务器kafka
一、idea插件安装 首先idea插件市场搜索“kafka”进行插件安装 二、kafka链接配置 1、检查服务器kafka配置 配置链接前需要保证远程服务器的kafka配置里边有配置好服务器IP,以及开放好kafka端口9092(如果有修改 过端口的开放对应端口就好) …...
第十节:性能优化高频题-虚拟DOM与Diff算法优化
优化策略:同层比较、静态节点标记、最长递增子序列算法 Key的作用:精确识别节点身份 虚拟DOM与Diff算法深度优化策略解析 一、核心优化策略 同层比较机制 Diff算法仅对比同一层级的虚拟节点,避免跨层级遍历带来的性能损耗。 • 实现原理&am…...
vmware workstation的下载地址页面
Fusion and Workstation | VMware...
kubernetes》》k8s》》Dashboard
安装Dashboard 因为我的Kubernetes 版本是 v1.28.2 对应的 Dashboard V2.7.0 wget -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml # 因为默认是集群内访问的,需要追加 NodePort访问类型 vim recommended.yaml …...
软考:数值转换知识点详解
文章目录 1. 进制转换1.1 二进制(Binary)、八进制(Octal)、十进制(Decimal)、十六进制(Hexadecimal)之间的转换1.2 手动转换和计算方法1.3 使用编程语言进行进制转换 2. 数据类型转换…...
第15章:MCP服务端项目开发实战:性能优化
第15章:MCP服务端项目开发实战:性能优化 在构建和部署 MCP(Memory, Context, Planning)驱动的 AI Agent 系统时,性能和可扩展性是关键的考量因素。随着用户量、数据量和交互复杂度的增加,系统需要能够高效地处理请求,并能够平滑地扩展以应对更高的负载。本章将探讨 MCP…...
Windows申请苹果开发者测试证书Uniapp使用
注意事项 苹果设备,最好是iPhone XS以上,要不然下载不了Apple DeveloperopenSSL 要是V1版本的来生成证书,要不然HBuilder报错按步骤来,生成证书,生成标识符,添加测试设备,生成描述性文件注册苹果开发者账号 (如果有苹果账号直接登录) 苹果开发者官网 开通付费 点击右上…...
服务器数据恢复—NAS存储中raid5上层lv分区数据恢复案例
NAS数据恢复环境: QNAP TS-532X NAS设备中有两块1T的SSD固态硬盘和3块5T的机械硬盘。三块机械硬盘组建了一组RAID5阵列,两块固态硬盘组建RAID1阵列。划分了一个存储池,并通过精简LVM划分了7个lv。 NAS故障: 硬盘故障导致无法正常…...
uniapp跨平台开发---switchTab:fail page `/undefined` is not found
问题描述 在项目中新增了一个底部tab导航栏,点击底部tabBar,跳转失败,控制台打印错误信息switchTab:fail page /undefined is not found 排查思路 错误信息提示,switchTab跳转的页面路径变成了/undefined,排查新增的pages.json文件,发现pages,以及tabBar中的list均已经加入该导…...
详细讲解 QMutex 线程锁和 QMutexLocker 自动锁的区别
详细讲解 QMutex 线程锁和 QMutexLocker 自动锁的区别 下面我们详细拆解 Qt 中用于线程同步的两个核心类:QMutex 和 QMutexLocker。 🧱 一、什么是 QMutex? QMutex 是 Qt 中的互斥锁(mutex)类,用于防止多个…...
如何获取静态IP地址?完整教程
静态IP地址,因其固定不变的特性,在远程访问、服务器搭建、电商多开、游戏搬砖等场景中显得尤为重要。以下是获取静态IP地址的完整教程,涵盖家庭网络、企业网络和公网静态IP的配置方法: 一、什么是静态IP? 内网IP&…...
JavaScript 里创建对象
咱们来用有趣的方式探索一下 JavaScript 里创建对象的各种“魔法咒语”! 想象一下,你是一位魔法工匠,想要在你的代码世界里创造各种奇妙的“魔法物品”(也就是对象)。你有好几种不同的配方和工具: 1. 随手…...
【华为HCIP | 华为数通工程师】821—多选解析—第十五页
多选794、以下关于高可用性网络特点的描述,正确的是哪些项? A、不会出现故障 B、不能频出现故障 C、一旦出现故障只通过人工干预恢复业务 D出现故障后能很快恢复 解析:高可用性网络拥有良好的可靠性,不间断转发NSF…...
Kaamel视角下的MCP安全最佳实践
在以AI为核心驱动的现代产品体系中,大模型逐渐从实验室走向生产环境,如何确保其在推理阶段的信息安全和隐私保护,成为各方关注的重点。Model Context Protocol(MCP) 作为一个围绕模型调用上下文进行结构化描述的协议&a…...
Kafka 命令行操作与 Spark-Streaming 核心编程总结
一、Kafka 命令行操作详解 1.创建 Topic 命令格式: kafka-topics.sh --create --zookeeper <zk节点列表> --topic <主题名> --partitions <分区数> --replication-factor <副本数> 参数说明: 分区数(partitions…...
【华为OD机试真题】428、连续字母长度 | 机试真题+思路参考+代码解析(E卷)(C++)
文章目录 一、题目题目描述输入输出样例1样例2 一、代码与思路🧠C语言思路✅C代码 一、题目 参考:https://sars2025.blog.csdn.net/article/details/139492358 题目描述 ◎ 给定一个字符串,只包含大写字母,求在包含同一字母的子串…...
nodejs获取请求体的中间件 body-parse
虽然 Express 4.16.0 之后已经内置了处理请求体的功能(express.json() 和 express.urlencoded()),但你也可以单独使用老牌中间件 body-parser,它仍然很常用,尤其在某些旧项目中。 📦 一、安装 body-parser …...
5.学习笔记-SpringMVC(P61-P70)
SpringMVC-SSM整合-接口测试 (1)业务层接口使用junit接口做测试 (2)表现层用postman做接口测试 (3)事务处理— 1)在SpringConfig.java,开启注解,是事务驱动 2)配置事务管理器(因为事务管理器是要配置数据源对象&…...
腾讯云服务器安全——服务防火墙端口放行
点击服务进入安全策略 添加规则...
mfc学习(一)
mfc为微软创建的一个类qt框架的客户端程序,只不过因为微软目前有自己 的亲身儿子C#(.net),所以到2010没有进行维护。然后一些的工业企业还在继续进行维护相关的内容。我目前就接手一个现在这样的项目,其实本质与qt的思路是差不多的…...
【MQ篇】初识RabbitMQ保证消息可靠性
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗! 🌟了解 MQ 请看 : 【MQ篇】初识MQ! 其他优质专栏: 【&…...
神经网络基础[ANN网络的搭建]
神经网络 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型。各个神经元传递复杂的电信号,树突接收到输入信号…...
【技术派后端篇】整合WebSocket长连接实现消息实时推送
在技术派平台中,实现了文章被点赞或评论后,在右上角实时弹出消息提醒的功能。相较于之前仅有的消息通知红色标识,这种实时通知在交互体验上有显著提升。本文将详细介绍如何借助WebSocket实现消息的实时通知。 1 基础知识点 1.1 相关概念 W…...
Janus Pro
目录 一、模型概述与开源情况 二、模型能力与性能 三、竞品分析 四、部署成本与个人部署成本比较 五、其他维度比较 1. 模型架构与创新性 2. 社区支持与生态系统 3. 更新频率与维护 4. 适用场景与灵活性 5. 商业化潜力 六、总结 Janus Pro 是中国初创公司 DeepSeek …...
[密码学实战]在Linux中实现SDF密码设备接口
[密码学实战]在Linux中实现SDF密码设备接口 引言 在密码学应用开发中,SDF(Security Device Interface)作为中国国家密码管理局制定的密码设备接口标准,被广泛应用于金融、政务等领域的安全系统中。本文将以GmSSL国产密码库为基础,手把手指导在Linux系统中部署SoftSDF——…...
机器学习基础 - 分类模型之SVM
SVM:支持向量机 文章目录 SVM:支持向量机简介基础准备1. 线性可分2. 最大间隔超平面3. 什么是支持向量?4. SVM 能解决哪些问题?5. 支持向量机的分类硬间隔 SVM0. 几何间隔与函数间隔1. SVM 最优化问题2. 对偶问题1. 拉格朗日乘数法 - 等式约束优化问题2. 拉格朗日乘数法 - …...
PostgreSQL 中的权限视图
PostgreSQL 中的权限视图 PostgreSQL 提供了多个系统视图来查询权限信息,虽然不像 Oracle 的 DBA_SYS_PRIVS 那样集中在一个视图中,但可以通过组合以下视图获取完整的系统权限信息。 一 主要权限相关视图 Oracle 视图PostgreSQL 对应视图描述DBA_SYS_…...
pnpm install报错:此系统上禁止运行脚本
依赖安装 报错信息: pnpm : 无法加载文件 C:\Users\XXX\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 …...
解决yarn install 报错 error \node_modules\electron: Command failed.
在电脑重装系统后,重新安装项目依赖,遇到这一报错 完整报错信息如下: error D:\xxxxx\xxxxxx\node_modules\electron: Command failed. Exit code: 1 Command: node install.js Arguments: Directory: D:\xxxxx\xxxxx\node_modules\electron Output: HTTPError: Response cod…...
深度学习3.7 softmax回归的简洁实现
import torch from torch import nn from d2l import torch as d2lbatch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size)3.7.1 初始化模型参数 net nn.Sequential(nn.Flatten(), nn.Linear(784, 10))def init_weights(m):if type(m) nn.Linear:…...