You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python爬取Finviz数据时如何输出多行结果而非仅单行

问题原因

你的代码有两个核心问题:

  1. 数据清洗和打印的逻辑写在了for循环外部,循环遍历所有行的过程中只会反复给row_td变量赋值,等循环结束后row_td只会保留最后一次遍历到的行数据,所以不管你调整多大的行索引范围,最终都只会输出最后一行的内容。
  2. 直接用全局tr标签的索引选行非常不稳定,只要页面结构有细微调整,索引就会偏移失效,最好直接定位到你要爬取的行情快照表格后再提取行数据。

修正后参考代码

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup

ticker = "KO"
# 必须配置UA,否则会被Finviz拦截
header = {"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"}

url = f'https://finviz.com/quote.ashx?t={ticker.upper()}'
r = Request(url, headers=header)
html = urlopen(r).read()
soup = BeautifulSoup(html, 'lxml')

# 直接定位目标表格,不用依赖全局元素索引
quote_table = soup.find("table", class_="snapshot-table2")
rows = quote_table.find_all("tr")

for row in rows:
    # 直接提取当前行所有单元格文本,无需重复解析HTML
    row_data = [td.get_text(strip=True) for td in row.find_all("td")]
    print(row_data)

运行上述代码即可输出该行情表格所有行的完整数据,每行对应表格里的一组6个字段(3组指标+数值对)。

内容的提问来源于stack exchange,提问作者squarehammer89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:09:03