You need to enable JavaScript to run this app. 如何使用Python的bs4或其他库抓取span标签内的电话号码
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的bs4或其他库抓取span标签内的电话号码

解决方案

问题根因

你写的两个BeautifulSoup查询语句没有语法错误,无法获取到电话号码的核心原因是:该站点的联系信息属于动态加载内容,不会在首次请求返回的静态HTML源码中渲染,需要用户点击「显示联系方式」按钮后才会通过异步请求拉取数据插入DOM。BeautifulSoup只能解析首次请求返回的静态内容,自然无法找到对应节点。

可行实现方案

方案1:模拟浏览器操作抓取

使用Playwright或Selenium模拟真实用户的点击操作,等待内容加载完成后再提取信息,Playwright示例代码如下:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # headless设为True可静默运行浏览器
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("目标商品页面地址")
    
    # 等待联系按钮加载完成后点击
    contact_btn = page.locator("button:has-text('اتصل بالبائع')")
    contact_btn.click()
    
    # 等待号码渲染后提取内容
    phone_num = page.locator(".contact a").inner_text()
    print(phone_num)
    
    browser.close()

方案2:直接调用异步接口获取

如果不需要启动浏览器,可以抓包获取联系方式的异步接口,直接构造请求拉取数据,性能比模拟浏览器更高:

  1. 打开浏览器开发者工具的「网络」面板,点击显示联系方式按钮后筛选XHR请求,找到返回联系信息的接口
  2. 补充和浏览器一致的请求头(User-Agent、Cookie等)后直接调用接口,解析返回的JSON数据即可拿到电话号码

注意事项

  • 控制请求频率,避免触发站点反爬规则被封禁IP
  • 调用接口时如果返回403,检查是否漏传了必要的请求头参数

内容的提问来源于stack exchange,提问作者Omar Mahmnoud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:48:04