使用requests-html爬取Capitol Trades提取股票代码返回None求助
解决方法
1. 修正CSS选择器
原代码里的span.q-field issuer-ticker写法错误,q-field和issuer-ticker是同一个<span>元素的两个类名,正确的CSS选择器应该用点连接多个类名,即span.q-field.issuer-ticker。
2. 优化渲染等待逻辑
部分动态内容加载耗时更长,可延长渲染等待时长,或指定等待目标元素加载完成。
3. 模拟浏览器请求头(可选)
部分网站会检测请求来源,添加标准浏览器的User-Agent能降低被拦截的概率。
修正后的代码
from requests_html import HTMLSession url = 'https://www.capitoltrades.com/trades?txType=buy&tradeSize=4&tradeSize=5&tradeSize=6&tradeSize=7&tradeSize=8&tradeSize=9&tradeSize=10' s = HTMLSession() # 添加浏览器请求头 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' } r = s.get(url, headers=headers) # 延长渲染等待时间,确保动态内容加载完成 r.html.render(sleep=3, wait=2) # 使用正确的CSS选择器定位元素 products = r.html.find('span.q-field.issuer-ticker') for product in products: print(product.text)
额外排查点
- 若仍无法获取数据,打开浏览器开发者工具(F12),确认目标元素的类名是否有动态变化(部分网站会随机修改类名反爬)。
- 若页面需要滚动加载更多内容,可在
render时添加scrolldown参数,比如r.html.render(sleep=3, scrolldown=5),模拟滚动加载更多条目。
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

