Selenium抓取雅虎财经数据速度慢,能否仅用requests库实现数据提取?
解决方案
你要提取的个股实时报价和涨跌幅数据本身就包含在雅虎财经的静态页面源码中,无需启动浏览器渲染,直接用requests发送HTTP请求即可获取,运行速度相比Selenium会提升数倍。
你只需要在请求中携带模拟浏览器的User-Agent头,避开雅虎的基础反爬拦截即可,完整实现代码如下:
import requests from bs4 import BeautifulSoup from openpyxl import load_workbook from openpyxl.styles import Font # 目标页面地址 url = "https://finance.yahoo.com/quote/WRD.PA?p=WRD.PA&.tsrc=fin-srch" # 构造请求头模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # 发送请求获取页面内容 resp = requests.get(url, headers=headers, timeout=10) resp.encoding = "utf-8" # 页面解析逻辑和原有逻辑一致 soup2 = BeautifulSoup(resp.text, 'lxml') data1 = soup2.find("span", class_="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").text.strip() data2 = soup2.find("span", class_="Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($negativeColor)").text.strip() # Excel写入逻辑保持不变 wb = load_workbook('output.xlsx') ws = wb.active fontstyle = Font(size = "16") ws['B9'].value = f'{data1} {data2}' ws.cell(row=9, column=2).font = fontstyle wb.save("output.xlsx")
注意事项
- 如果运行时出现属性获取报错,大概率是请求被反爬拦截,更换
User-Agent的取值重试即可 - 如果后续雅虎调整了元素类名,重新在浏览器F12开发者工具中查看对应元素的类名替换即可
内容的提问来源于stack exchange,提问作者Animesh Singh
相关产品推荐
相关产品推荐

