如何用Python模拟AJAX POST请求获取页面隐藏的电话号码?
伪造AJAX POST请求抓取隐藏手机号的实现步骤
要获取页面中点击加载的完整手机号,核心是还原浏览器触发的AJAX请求,具体操作如下:
1. 分析AJAX请求的关键信息
打开浏览器开发者工具(F12)切换到网络面板,点击页面上的手机号按钮,找到触发的POST请求,记录以下内容:
- 请求的目标接口URL(比如类似
/ajax/get-phone/这类路径) - 请求携带的参数(比如车辆ID、csrf令牌等,可能是表单数据或JSON格式)
- 必须携带的请求头字段(比如
X-Requested-With: XMLHttpRequest,多数网站会校验这个AJAX请求标识)
2. 从页面源码提取必要参数
从已获取的页面响应中,提取AJAX请求需要的参数,示例代码如下:
# 提取车辆ID(假设按钮元素带有data-id属性) car_id = soup.find('button', class_='phone-btn')['data-id'] # 提取csrf令牌(假设页面meta标签中存在该字段) csrf_token = soup.find('meta', attrs={'name': 'csrf-token'})['content']
3. 构造并发送POST请求
利用已创建的Session(自动维护Cookie),补充AJAX请求专属头信息,发送请求并解析结果:
# 复制基础请求头并补充AJAX所需字段 ajax_headers = headers.copy() ajax_headers.update({ "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest", "Referer": "https://www.mashina.kg/details/kia-sorento-64631fe26592a662606296" }) # 构造请求参数(根据实际抓包结果调整) payload = { "car_id": car_id, "csrfmiddlewaretoken": csrf_token } # 发送POST请求(替换为实际的AJAX接口URL) ajax_response = s.post( "https://www.mashina.kg/ajax/load-phone/", headers=ajax_headers, data=payload # 若接口接收JSON格式,改用json=payload ) # 解析返回数据并提取手机号 phone_data = json.loads(ajax_response.text) full_phone = phone_data.get('phone') print(full_phone)
注意事项
- 部分网站有反爬限制,可添加
time.sleep(1)控制请求频率,避免被封禁 - 若请求失败,检查Cookie有效性、参数完整性,是否存在加密签名类参数需要模拟
- 保持
User-Agent与浏览器一致,降低被识别为爬虫的概率
内容的提问来源于stack exchange,提问作者Jensen Benny
相关产品推荐
相关产品推荐

