求助:使用Python和Beautiful Soup抓取隐藏手机号的正确方法
解决点击“显示”按钮获取手机号的爬虫方案
核心解决思路
这种得点击才显示的手机号,大多是通过**异步请求(AJAX)**加载的——说白了就是你点按钮的时候,网页偷偷发了个请求去服务器拿手机号。根本不用模拟浏览器逐个点击,直接找到这个请求的接口,用Python直接调用就行,效率高多了。
具体操作步骤(以你给的示例网站为例)
抓包找接口
打开浏览器按F12开开发者工具,切到「网络」标签页,然后点页面上的“显示”按钮。这时候你能看到新出现的请求,找那种带api、phone或者车辆ID的接口,比如示例页面里的车辆ID是34684935,对应的接口大概是https://auto.ria.com/api/phones/get/34684935(具体以你抓包看到的为准)。用Python直接请求接口拿数据
用requests库就能搞定,不用Selenium,代码示例:import requests # 替换成你要爬的车辆ID car_id = "34684935" api_url = f"https://auto.ria.com/api/phones/get/{car_id}" # 带上请求头,避免被网站当成机器人拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 发送请求 response = requests.get(api_url, headers=headers) # 解析返回的JSON数据 phone_info = response.json() # 提取手机号 if "phones" in phone_info: for item in phone_info["phones"]: print("手机号:", item["formattedNumber"])批量爬取的优化
如果要爬一堆车辆,先从列表页把所有车辆的ID都扒下来,然后循环调用上面的接口就行,比用Selenium逐个打开页面快太多了。
几点要注意的
- 别请求太频繁,加个
time.sleep(1)之类的延迟,不然容易被网站封IP。 - 有些网站的接口可能需要带Cookie或者Token,抓包的时候记得把这些请求头信息也复制过去。
内容的提问来源于stack exchange,提问作者100yak
相关产品推荐
相关产品推荐

