使用BeautifulSoup爬取股票数据时如何遍历全部目标元素
问题根因
代码中定位的class="tBody"的div节点在整个目标页面中仅存在1个,是所有股票数据行的外层父容器,并非单条股票对应的独立条目,因此for循环只会执行1次,自然只能输出第一条匹配到的内容,无法遍历全部股票数据。
修正方案
先定位到外层的tBody容器,再在容器内部提取每一条股票数据对应的行节点(即class为satir的li元素,每个li对应一支股票的完整数据),之后遍历这些行节点提取所需字段即可。
修正后可运行代码
import requests from bs4 import BeautifulSoup url = "https://bigpara.hurriyet.com.tr/borsa/hisse-fiyatlari/" r = requests.get(url) soup = BeautifulSoup(r.content, "lxml") # 定位外层表格容器 table_wrapper = soup.find("div", attrs={"class": "tBody"}) # 提取所有单支股票对应的行条目 stock_rows = table_wrapper.find_all("li", attrs={"class": "satir"}) for row in stock_rows: stock_title = row.a.get_text(strip=True) current_price = row.find("li", attrs={"class": "cell004"}).get_text(strip=True) print("{} {}".format(stock_title, current_price))
核心调整说明
- 原逻辑错误将外层容器作为遍历对象,改为先取容器、再取容器内的所有数据行作为遍历对象,才能覆盖全部股票条目
- 文本提取使用
get_text(strip=True)替代直接取.string,可适配标签嵌套的场景,避免出现取值为None的问题 - 外层容器因为全页唯一,用
find替代find_all更符合页面结构逻辑
内容的提问来源于stack exchange,提问作者Muhammed Didin
相关产品推荐
相关产品推荐

