使用Python爬取Finviz数据时如何输出多行结果而非仅单行
问题原因
你的代码有两个核心问题:
- 数据清洗和打印的逻辑写在了
for循环外部,循环遍历所有行的过程中只会反复给row_td变量赋值,等循环结束后row_td只会保留最后一次遍历到的行数据,所以不管你调整多大的行索引范围,最终都只会输出最后一行的内容。 - 直接用全局
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
相关产品推荐
相关产品推荐

