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

如何用Python BeautifulSoup4从标签列表构建属性值列表(找回代码)

解决Finviz筛选器页面提取option value属性的问题

我之前爬Finviz筛选器的时候也踩过一模一样的坑!你这里的核心问题是把HTML属性和HTML标签搞混了——find_all('value')是在找名为<value>的标签(这种标签根本不存在),而你实际需要的是<option>标签里的value属性,这完全是两回事。

错误原因拆解

你之前的写法f.find_all('value')会返回空列表,因为BeautifulSoup的find_all()方法的第一个参数是标签名称,它会在DOM里搜索<value>标签,但你的目标是<option>标签的value属性,所以这个写法从根上就错了。

正确实现代码

结合你提到的requests、BeautifulSoup4工具,下面是可以直接运行的完整代码,完全符合你要的嵌套列表输出格式:

import requests
from bs4 import BeautifulSoup

# 处理Finviz反爬,添加请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

# 获取Finviz筛选器页面
url = "https://finviz.com/screener.ashx"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 定位所有带data-filter属性的select标签
select_elements = soup.find_all('select', attrs={'data-filter': True})

# 生成嵌套列表:每个子列表对应一个select下的所有option的value值
option_values_nested = []
for select in select_elements:
    # 找到当前select下的所有option子标签
    all_options = select.find_all('option')
    # 提取每个option的value属性,无属性时默认空字符串(兼容无value的默认选项)
    current_values = [opt.get('value', '') for opt in all_options]
    option_values_nested.append(current_values)

# 验证输出格式(比如交易所筛选的子列表会是['', 'amex', 'nyse', 'nasd'])
print(option_values_nested)

关键细节说明

  1. 安全提取属性:用opt.get('value', '')代替直接opt['value'],因为有些<option>标签(比如默认的"请选择"选项)可能没有value属性,直接取会抛出KeyError,get()方法可以指定默认值避免报错。
  2. 精准定位select:soup.find_all('select', attrs={'data-filter': True})确保只拿到你需要的带data-filter属性的select标签,不会混入页面其他无关的select。
  3. 反爬处理:Finviz会拦截无请求头的爬虫,所以必须添加User-Agent模拟浏览器请求。

期望输出示例

运行后你会得到完全符合要求的嵌套列表,比如其中几个子列表会是:

[
    ['', 'faang', 'mega_cap', 'large_cap', ...],  # 市值筛选
    ['', 'amex', 'nyse', 'nasd'],  # 交易所筛选
    ['', 'sector_consumer', 'sector_tech', ...]   # 行业筛选
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:42:47