使用Python提取DTCC网站搜索结果链接失败,寻求解决方法
解决DTCC搜索结果链接无法抓取的问题
问题原因
DTCC的搜索结果页面采用动态渲染机制:初始GET请求返回的静态HTML中并不包含那100条搜索结果的链接,这些内容是页面加载完成后,通过JavaScript向后台API接口请求并渲染出来的。所以直接用requests获取静态页面,再用BeautifulSoup解析,自然拿不到目标链接。
解决方案:直接调用搜索API接口
通过浏览器开发者工具找到真实的搜索接口,直接请求接口获取JSON格式的结果,再从中提取链接即可。
步骤1:定位真实API接口
- 打开浏览器F12开发者工具,切换到「Network」标签页
- 刷新搜索页面,筛选「XHR/Fetch」类型的请求
- 找到包含搜索关键词的请求(通常URL包含
search/api之类的字段),查看其请求参数和返回内容
步骤2:编写代码请求API
以下是可直接参考的代码示例:
import requests # 替换为你在开发者工具中找到的真实API地址 api_url = "https://www.dtcc.com/search/api/v2/search" # 配置搜索参数,根据实际接口调整 params = { "q": "aggregated transaction data", "pageSize": 100, # 单次请求获取100条结果 "pageNumber": 1, "sort": "relevance", "language": "en-us" } # 模拟浏览器请求头,避免被反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 发送请求并解析JSON结果 response = requests.get(api_url, params=params, headers=headers) response.raise_for_status() # 捕获请求错误 search_results = response.json() # 提取并打印所有结果链接 for item in search_results.get("results", []): raw_link = item.get("url") if raw_link: # 补全相对路径为完整URL full_link = raw_link if raw_link.startswith("http") else f"https://www.dtcc.com{raw_link}" print(full_link)
注意事项
- 接口参数可能随网站更新变化,若代码失效,需重新在开发者工具中抓取最新的请求参数
- 若需要获取多页结果,循环修改
pageNumber参数即可 - 部分网站会对请求频率做限制,建议添加适当的请求间隔,避免被封禁IP
内容的提问来源于stack exchange,提问作者mkt_troglodyte
相关产品推荐
相关产品推荐

