使用Selenium+BeautifulSoup提取股票代码遇NoneType属性错误求助
解决Finviz页面提取股票代码的AttributeError问题
问题出在你遍历所有<tr>标签时,不是每一行都包含目标的screener-link-primary类<a>标签——有些行(比如表头、空行)找不到这个元素,会返回None,这时调用.text或.contents自然会触发NoneType属性错误。
修复方案:先判断元素是否存在,再提取内容
修改你的循环代码,加上非空判断,确保只处理找到目标元素的行:
for row in searchSource.findAll("tr"): ticker_element = row.find("a", class_="screener-link-primary") # 先检查元素是否存在,再执行提取操作 if ticker_element: # 直接提取文本,strip()去掉可能的空格 ticker = ticker_element.text.strip() print(ticker) # 也可以用get_text(),效果一致 # ticker = ticker_element.get_text(strip=True)
备选方案:从URL参数中提取股票代码
如果遇到文本提取异常的情况,还可以从<a>标签的href属性里解析t参数拿到股票代码,这种方式更稳定:
from urllib.parse import urlparse, parse_qs for row in searchSource.findAll("tr"): ticker_element = row.find("a", class_="screener-link-primary") if ticker_element: href = ticker_element.get("href") parsed_params = parse_qs(urlparse(href).query) ticker = parsed_params["t"][0] print(ticker)
之前静态页面没问题,是因为静态页面的<tr>结构更规整,所有数据行都包含目标<a>标签;而Finviz的动态页面可能存在额外的非数据行,导致部分循环迭代中ticker_element为None。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

