无需Selenium提取mubawab.ma页面点击显示按钮后的隐藏手机号
现有代码问题排查
- URL与正则匹配逻辑错误:详情页URL末尾带多余换行符,且广告ID提取正则写为匹配
(\d+)\.htm,但实际目标URL无.htm后缀,运行会直接抛出属性错误,无法拿到有效广告ID - 接口地址错误:写死的
phone_url为残缺的JS代码片段,包含多余无效字符', 'adPage,也未预留广告ID的格式化占位符,拼接后的请求地址完全无效 - 请求缺失必要校验头:站点对AJAX接口做了基础反爬校验,裸requests请求不带User-Agent、Referer、AJAX请求标识头会被直接拦截,无法拿到有效返回
- 解析逻辑错误:接口返回内容为直接渲染手机号的HTML片段,不存在
getTrackingPhone(...)的JS代码片段,该正则匹配完全无法命中
无Selenium可行实现方案
核心逻辑为从详情页URL提取广告ID,构造「显示号码」按钮触发的真实AJAX接口地址,携带和浏览器一致的请求头调用接口,直接从返回的HTML结构中提取手机号,全程无需浏览器自动化工具。
首先安装依赖:pip install requests beautifulsoup4
可直接运行的代码如下:
import re import requests from bs4 import BeautifulSoup # 目标详情页URL,去除多余换行 detail_url = "https://www.mubawab.ma/fr/a/7469776/beau-terrain-%C3%A0-la-vente-%C3%A0-hay-izihar-superficie-68-m%C2%B2-" # 模拟真实浏览器请求头,绕过基础反爬校验 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": detail_url, "X-Requested-With": "XMLHttpRequest" } # 从URL提取广告ID,修正正则匹配规则 ad_id_match = re.search(r"/a/(\d+)/", detail_url) if not ad_id_match: raise ValueError("广告ID提取失败,请检查URL格式") ad_id = ad_id_match.group(1) # 构造显示号码按钮触发的真实AJAX接口 phone_api = f"https://www.mubawab.ma/fr/ajax/getPhone?ad_id={ad_id}" # 发起请求获取返回内容 resp = requests.get(phone_api, headers=headers) resp.raise_for_status() soup = BeautifulSoup(resp.text, "html.parser") # 提取手机号和广告文本 phone_number = soup.select_one(".phone").get_text(strip=True) ad_text = soup.select_one(".texto").get_text(strip=True) if soup.select_one(".texto") else "无广告描述" print(f"广告描述:{ad_text}") print(f"联系电话:{phone_number}")
注意事项
- 若请求返回403状态码,将headers中的User-Agent替换为你本地浏览器的UA值即可
- 短时间内不要高频发起请求,否则会触发站点IP临时封禁,可适当增加请求间隔
- 接口返回的手机号为明文字段,不需要额外解密,直接提取标签文本即可
内容的提问来源于stack exchange,提问作者Little1
相关产品推荐
相关产品推荐

