You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BeautifulSoup获取需点击按钮显示的电话号码(不使用Selenium)

无需Selenium获取点击显示的电话号码

以下是不用Selenium的解决思路和代码示例:

思路1:检查页面源码中的隐藏数据

很多网站会把需要点击才显示的电话号码提前嵌入HTML,只是通过CSS隐藏。直接在返回的页面内容里搜索相关元素:

  • 查找带有data-phone、hidden这类属性的元素
  • 搜索页面中可能存在的电话号码格式字符串(比如带+号、括号的数字)

思路2:分析AJAX接口请求

点击显示电话的按钮时,浏览器通常会发送AJAX请求拉取号码。用浏览器开发者工具(F12)的Network标签,监控点击按钮后的请求,找到对应的API接口,直接用requests请求该接口获取数据。需要注意:

  • 带上和浏览器一致的请求头(比如User-Agent、Referer)
  • 接口参数可能需要传入页面URL中的公司ID(比如示例中的00000005443350-781559001)

代码示例

import requests
from bs4 import BeautifulSoup

url = "https://www.europages.co.uk/ARTISAN-4-SEASON-PROJECTS/00000005443350-781559001.html"
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"
}

# 获取页面基础信息
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')

name = soup.find('h1', class_="ep-epages-header-title text-h6 text-sm-h4").text.strip()
address = soup.find('dd').text.strip()
print(f"公司名称:{name}")
print(f"地址:{address}")

# 尝试提取隐藏的电话号码
phone_element = soup.find(attrs={"data-phone": True})
if phone_element:
    phone = phone_element.get("data-phone")
    print(f"电话号码:{phone}")
else:
    # 若隐藏数据不存在,使用抓包得到的API接口(需自行替换实际接口)
    company_id = url.split('/')[-1].split('.')[0]
    # 示例接口,需根据实际抓包结果修改
    api_url = f"https://www.europages.co.uk/api/company-contact/{company_id}"
    api_res = requests.get(api_url, headers=headers)
    if api_res.status_code == 200:
        contact_data = api_res.json()
        phone = contact_data.get("phoneNumber")
        if phone:
            print(f"电话号码:{phone}")

注意事项

  • 部分网站的电话号码可能经过简单加密(比如字符替换、Base64编码),需要查看页面中的JS解密逻辑,用Python实现对应解密步骤
  • 若网站有反爬机制,可能需要添加Cookie或调整请求频率,避免被封禁

内容的提问来源于stack exchange,提问作者Gyan Dixit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:51:14