如何使用Beautiful Soup获取指定class的第一个span标签提取基金价格
基金爬取代码调整方案
核心修改逻辑
BeautifulSoup的findAll()方法会按页面出现顺序返回所有匹配元素的列表,你需要的价格在第一个匹配项里,直接取索引[0]就能定位,不需要遍历所有匹配的span。同时可以对日期、价格文本做简单清洗,直接拿到结构化数据。
调整后完整代码
from bs4 import BeautifulSoup import requests import csv # 如需存储为csv表格可导入该库 # 创建url列表 urls = ['https://www.blackrock.com/sg/en/products/241427/blackrock-cont-european-flexible-d4rf-gbp-fund'] headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'} # 爬取循环 for url in urls: response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, "html.parser") # 直接取第一个class为header-nav-data的span,清洗文本得到纯价格 price_span = soup.findAll('span', {'class':'header-nav-data'})[0] price = price_span.text.strip().replace('GBP', '').strip() # 提取日期,清洗掉冗余前缀 date_span = soup.findAll('span', {'class':'header-nav-label navAmount'})[0] date = date_span.text.strip().replace('NAV as of', '').strip() # 打印验证结果 print(f"日期:{date},价格:{price}") # 可选:写入csv表格的逻辑,首次运行可取消表头注释 with open('fund_price.csv', 'a', newline='', encoding='utf-8') as f: writer = csv.writer(f) # writer.writerow(['Date', 'Price']) writer.writerow([date, price])
关键改动说明
- 取消原代码对所有
header-nav-data元素的遍历,直接用[0]取第一个匹配的目标元素 - 对提取到的原始文本做了去空格、删除冗余字符处理,直接拿到干净的日期和价格数值
- 补充了写入csv表格的可选逻辑,适配存储数据到表格的需求
内容的提问来源于stack exchange,提问作者Tcs106
相关产品推荐
相关产品推荐

