Python使用BeautifulSoup(BS4)解析网页无法获取指定href求助
失效原因
- 目标站点为Angular框架开发的单页应用,页面中你需要的资源列表是客户端JavaScript执行后动态渲染生成的
- 你直接使用requests发起的静态请求只能拿到未执行JS的初始HTML源码,源码中不存在
row ng-star-inserted类的节点,所以原有定位逻辑完全失效
可行解决方案
推荐使用支持JS渲染的工具加载页面后再用BS4解析,以下是可直接运行的代码示例,用requests-html实现,无需配置复杂的浏览器驱动:
首先安装依赖:
pip install requests-html beautifulsoup4
采集代码:
from requests_html import HTMLSession from bs4 import BeautifulSoup url = "https://www.temit.co.uk/investor/resources/temit-literature" session = HTMLSession() resp = session.get(url) # 等待页面JS渲染完成,最长等待10秒 resp.html.render(timeout=10) soup = BeautifulSoup(resp.html.html, 'html.parser') # 直接通过链接特征匹配目标,比层级定位更稳定,不受页面结构调整影响 target_a = soup.find('a', href=lambda x: x and '173-fact-sheet-retail-investor-factsheet' in x) if target_a: url_TEM = target_a.get('href') print(url_TEM) else: print("未找到目标链接") session.close()
补充说明
- 如果你习惯用Selenium/Playwright等浏览器自动化工具,逻辑完全一致:只要等待页面加载完成后获取完整的页面源码,再用BS4或者工具自带的选择器定位即可
- 代码中使用href特征匹配的方式,比原有按索引取列表节点的方式稳定性更高,即使后续页面板块顺序调整,只要目标链接特征不变就不会失效
- 你需要的目标href本身是完整的外部链接,不需要再拼接站点域名,原有拼接逻辑可以去掉
内容的提问来源于stack exchange,提问作者Sjamsing
相关产品推荐
相关产品推荐

