
本文将指导读者如何使用python从动态加载的网页弹出按钮中抓取隐藏的电话号码。针对beautifulsoup无法处理j*ascript动态内容的局限性,我们将采用直接模拟浏览器底层api请求的方法,通过分析网络流量,重构post请求,并解析json响应,高效地获取目标数据,避免了使用重量级自动化工具如selenium的复杂性。
在网络爬虫实践中,我们经常会遇到内容并非直接嵌入在初始HTML中的情况。许多现代网站利用J*aScript动态加载数据,例如通过点击按钮弹出的对话框、无限滚动页面或异步更新的内容。对于这类场景,传统的HTML解析库如BeautifulSoup仅能处理请求获得的静态HTML内容,而无法执行J*aScript来渲染或加载动态数据。
例如,当尝试抓取一个只有在点击“联系方式”或“查看电话”按钮后才显示电话号码的网站时,如果仅使用BeautifulSoup,你可能会发现按钮对应的HTML元素中并不包含电话号码,而是一个占位符或触发J*aScript函数的代码。此时,BeautifulSoup的输出将只包含按钮本身,而无法获取到点击后才出现的信息。
虽然Selenium等工具可以模拟完整的浏览器行为,包括执行J*aScript和点击元素,但对于仅需获取特定动态加载数据的情形,Selenium往往显得过于重量级,会增加额外的开销和复杂性。更高效的方法是直接识别并模拟浏览器用于获取这些动态数据的底层API请求。
获取动态加载数据的关键在于理解浏览器在后台是如何获取这些数据的。通常,当用户在网页上进行交互(如点击按钮)时,浏览器会向服务器发送一个异步请求(XHR/Fetch请求),服务器返回数据(通常是JSON格式),然后J*aScript再将这些数据渲染到页面上。
要识别这些API请求,你需要使用浏览器的开发者工具:
Jaaz
开源的AI设计智能体
216
查看详情
通过分析,你会发现本例中电话号码数据是通过向 https://graphql.haraj.com.sa 发送一个POST请求,并携带一个GraphQL查询作为请求体来获取的。
一旦识别出API请求的所有细节,我们就可以使用Python的requests库来模拟这个请求。
import requests
import sys
def scrape_phone_number(post_id: int):
"""
通过模拟API请求从Haraj网站抓取指定帖子的电话号码。
Args:
post_id (int): 帖子的唯一标识符。
Returns:
str: 提取到的电话号码,如果失败则返回None。
"""
# GraphQL API的端点URL
url = "https://graphql.haraj.com.sa"
# 请求参数 (query string parameters)
# 示例中这些参数可以为空,表示API可能对它们不敏感或有默认值
params = {
"queryName": "postContact",
"token": "",
"clientId": "",
"version": ""
}
# 请求头,模拟浏览器行为
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
# 请求体 (payload),包含GraphQL查询和变量
# 注意:'postId' 是动态获取电话号码的关键参数
payload = {
"query": "query postContact($postId: Int!) {postContact(postId: $postId){contactText}}",
"variables": {
"postId": post_id
}
}
try:
# 发送POST请求,requests库会自动将payload转换为JSON格式
response = requests.post(url, params=params, headers=headers, json=payload)
# 检查HTTP状态码,如果不是2xx则抛出异常
response.raise_for_status()
# 解析JSON响应
data = response.json()
# 从JSON数据中提取电话号码
contact_text = data.get('data', {}).get('postContact', {}).get('contactText')
if contact_text:
print(f"成功获取电话号码: {contact_text}")
return contact_text
else:
print("未在响应中找到电话号码。")
return None
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
except ValueError as e:
print(f"JSON解析失败: {e}")
return None
if __name__ == "__main__":
# 示例帖子ID,这个ID通常需要从原始网页URL或HTML中提取
# 例如,如果原始URL是 https://haraj.com.sa/1194697687,则 postId 可能是 94697687
example_post_id = 94697687
phone_number = scrape_phone_number(example_post_id)
if phone_number:
print(f"最终提取的电话号码是: {phone_number}")
else:
print("未能提取电话号码。")
sys.exit(0)
当面对J*aScript动态加载内容的网站时,BeautifulSoup等静态HTML解析器会力不从心。此时,直接模拟浏览器底层的API请求是一种更高效、更直接的解决方案。通过熟练运用浏览器开发者工具分析网络流量,识别API端点、请求方法、请求头和请求体,我们可以精确地使用Python的requests库重构这些请求,从而绕过复杂的页面渲染过程,直接获取所需数据。这种方法不仅避免了Selenium的额外开销,也为处理各种动态网页爬取任务提供了强大的工具。
以上就是使用Python绕过动态加载:从弹出按钮中抓取隐藏电话号码的API方法的详细内容,更多请关注其它相关文章!
# python
# seo视频拆解
# 医院网站站群建设
# 衡水网站建设意见
# 读seo有前途吗
# 小型健身俱乐部网站建设
# 清远网站建设哪家好
# 济宁模板网站优化公司
# 选项卡
# 抛出
# 后才
# 双击
# 所需
# 重构
# 这是
# javascript
# java
# html
# js
# json
# windows
# 网络爬虫
# 浏览器
# app
# 工具
# 加载
# 弹出
# 数据结构
# 国外免费网站推广大全有哪些
# 青岛企业网站建设便宜
# 武清区常规网站优化系统
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Go Goroutine调度与并发执行深度解析
mysql怎么导入sql文件_mysql导入sql文件的方法与技巧
向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法
《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊
批改网官网首页登录 批改网学生用户登录入口
Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧
excel怎么制作考勤表 excel考勤模板与函数公式讲解
AO3中文版手机快速通道_AO3最新稳定链接更新
红手指专业版app注册教程
京东快递物流信息不更新怎么办_物流停滞原因与处理方法
J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践
申通快件单号查询平台 申通包裹物流动态跟踪
《微信》视频号原创声明开启方法
PHP中动态类名访问的类实例类型提示与静态分析实践
J*aScript装饰器_元编程实战
猫眼app抢票快还是小程序快
Symfony路由参数转换器:实体存在性验证与错误处理策略
sublime text 4如何安装_最新版sublime下载与汉化教程
毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明
京东快递包裹信息查询入口 京东快递官方查询平台入口
B站怎么快速升级 B站用户等级提升攻略【详解】
Retrofit根路径POST请求:@POST("/") 的应用与解析
《王者荣耀世界》英雄获取攻略
win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】
申通快递物流信息查询 申通快递包裹状态追踪
《伊瑟》凶影追缉库卢鲁boss攻略
全球各国上班时间表外贸邮件时间
鸿蒙单条备忘录如何加密
Golang如何测试结构体方法_Golang reflect方法测试与调用技巧
豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】
《sketchbook》选中部分图案移动方法
《虎扑》取消评分记录方法
win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】
荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复
J*aScript与HTML元素交互:图片点击事件与链接处理教程
《撕歌》会员开通方法
网页版网易云音乐入口_网易云音乐在线官网登录
Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】
todesk如何添加信任设备_todesk信任设备设置教程
菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤
c++如何链接Boost库_c++准标准库的集成与使用
C++ optional用法详解_C++17处理可能为空的返回值
Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】
如何取消数字签名
百度竞价WAP显示PC链接问题
Teambition网盘如何共享文件
2025SNH48年度青春盛典门票价格及购买方式
t3出行如何使用微信支付
mysql如何回滚事务_mysql ROLLBACK事务回滚方法
解决VS Code中Python版本冲突与输出异常的指南
2025-11-03
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。