
本文详解为何 requests + beautifulsoup 无法获取 dtcc 网站搜索结果链接,并提供基于 selenium 的可靠解决方案,支持无头模式、精准定位及后续 beautifulsoup 协同解析。
DTCC 官网(https://www.php.cn/link/8dc56b3dd5380fcd7402ce0fbc75cb1e)的搜索结果是通过 JavaScript 动态渲染的——页面初始 HTML 中并不包含实际的搜索结果 标签,而是由前端脚本在浏览器中异步加载并插入 DOM。因此,仅用 requests.get() 获取原始 HTML 后交由 BeautifulSoup 解析,必然无法捕获这些链接,这也是你代码中 soup.find_all(attrs={'href': re.compile("http")}) 一无所获的根本原因。
要正确提取这类动态内容,必须借助浏览器自动化工具模拟真实访问行为。Selenium 是最常用且稳定的选择。以下是推荐的实践方案:
✅ 推荐方案:Selenium 直接提取(简洁高效)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
search_url = "https://www.php.cn/link/8dc56b3dd5380fcd7402ce0fbc75cb1e?q=aggregated%20transaction%20data"
# 配置无头 Chrome(不显示浏览器窗口)
opts = Options()
opts.add_argument('--headless')
opts.add_argument('--no-sandbox')
opts.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(options=opts)
try:
driver.get(search_url)
# 等待搜索结果容器加载完成(更健壮的做法是使用 WebDriverWait)
time.sleep(5)
# 定位搜索结果区域,再查找其中所有 标签
results_container = driver.find_element(By.CLASS_NAME, 'search-results')
links = results_container.find_elements(By.TAG_NAME, 'a')
for link in links:
href = link.get_attribute('href')
if href and not href.startswith('#'): # 过滤空链接和锚点
print(href)
finally:
driver.quit() # 确保关闭浏览器进程⚠️ 注意事项:time.sleep(5) 是简易等待方式,生产环境建议改用 WebDriverWait 显式等待元素出现(例如 presence_of_element_located((By.CLASS_NAME, 'search-results'))),避免因网络波动导致提取失败。若遇到 NoSuchElementException,请检查 .search-results 类名是否变更(可通过浏览器开发者工具确认当前 DOM 结构)。ChromeDriver 版本需与本地 Chrome 浏览器兼容;若报错 WebDriverException,请更新驱动或指定 executable_path。
? 进阶方案:Selenium + BeautifulSoup 协同(灵活性更强)
如果你习惯用 BeautifulSoup 进行复杂解析(如提取标题、摘要、发布时间等),可先用 Selenium 获取渲染后的完整 HTML,再交由 BeautifulSoup 处理:
from bs4 import BeautifulSoup
# ...(同上启动 driver 并访问页面)...
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
for a in soup.select('.search-results a[href]'):
print(a['href'])该方式兼顾了 Selenium 的动态执行能力与 BeautifulSoup 的语法简洁性,适合结构较复杂的页面解析任务。
总之,面对 JS 渲染的搜索结果页,放弃纯 requests 方案,转向 Selenium 是必要且高效的路径。只要合理配置等待机制与选择器,即可稳定、准确地抓取目标链接。










