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

使用bs4抓取网页时无法获取COUNTY CONTACT板块目标链接

问题原因

你的判断完全正确,目标页面的「COUNTY CONTACT」板块内容是JavaScript异步拉取数据后动态插入到DOM中的。BeautifulSoup本身没有JS执行能力,只能解析你传入的静态HTML文本,无法拿到前端渲染完成后的完整内容。
你当前代码能拿到其他链接唯独缺目标链接,核心是取page_source的时机不对:页面刚打开时目标板块还没完成渲染,你拿到的源码里本来就没有这部分内容。

解决方法

方法1:基于现有Selenium逻辑改造(改造成本最低)

你已经用了browser对象驱动浏览器,只需要加显式等待,等目标内容渲染完成后再取源码解析即可,不要页面刚加载就立刻读page_source。
示例代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time

# 页面跳转完成后,先等待COUNTY CONTACT板块加载可见
wait = WebDriverWait(browser, 10)
contact_block_title = wait.until(
    EC.visibility_of_element_located((By.XPATH, "//*[contains(text(),'COUNTY CONTACT')]"))
)
# 如果页面有懒加载,就滚动到板块位置触发渲染
browser.execute_script("arguments[0].scrollIntoView({block: 'center'});", contact_block_title)
time.sleep(1)

# 此时再获取源码解析,就能拿到动态渲染的链接
soup = BeautifulSoup(browser.page_source, "lxml")
# 精准定位到板块下的链接,避免拿到其他无关a标签
contact_section = soup.find(lambda tag: tag.string and "COUNTY CONTACT" in tag.string).parent
target_links = contact_section.find_all("a")
print(target_links)

方法2:直接调用数据接口(批量爬取效率更高)

这个站点的县详情数据都是通过后端接口返回的结构化JSON数据,不需要加载整个页面、渲染前端。你可以打开浏览器开发者工具的网络面板,筛选XHR/Fetch请求,找到返回县详情数据的接口,直接构造请求拿数据,从返回的JSON里直接取联系方式对应的链接即可,不需要用BeautifulSoup解析HTML,爬取速度会比Selenium方案高几十倍。
请求时带上和浏览器一致的请求头即可正常拿到数据,不会被拦截。

排查步骤

如果调整后还是拿不到目标链接,先做基础校验:

将你传给BeautifulSoup的page_source内容完整打印出来,直接搜索目标链接的对应文本,如果搜不到,说明取源码的时机还是太早,内容还没渲染完成;如果能搜到,说明你的BeautifulSoup定位选择器写得有问题,调整选择器范围即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:15:40