Python爬虫报错求助:SyntaxError与NoneType不可迭代问题
错误原因分析及解决方法
一、原代码的语法错误原因
- 变量命名非法:
for h-full aspect-h-16 aspect-w-16 ng-tns-c75-1 in resultado:中,你用了带空格、连字符的字符串作为循环变量名。Python变量名只能包含字母、数字、下划线,且不能以数字开头,连字符会被解析为减法运算符,空格会被当成多个变量的分隔,直接触发SyntaxError。
二、修改后TypeError的原因
soup.find('div', class_='xxx')只会返回第一个匹配的div元素,如果没有找到匹配元素则返回None。你直接对resultado做循环,当find返回None时,就会触发'NoneType' object is not iterable错误;即使找到元素,单个Tag对象也不是可迭代的(除非你是遍历它的子节点,但这不是你的需求)。
三、完整解决代码
import requests from bs4 import BeautifulSoup headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36' } # 发起请求,主动抛出请求错误便于排查 r = requests.get('https://exchange.art/gson/nfts?sort=listed-oldest') r.raise_for_status() soup = BeautifulSoup(r.content, 'html.parser') # 用find_all获取所有匹配class的div,而非单个元素 resultados = soup.find_all('div', class_='h-full aspect-h-16 aspect-w-16 ng-tns-c75-1') nftlink = [] # 循环每个匹配的div元素 for div in resultados: # 提取当前div下的所有有效a标签链接 for link in div.find_all('a', href=True): href = link['href'] print(href) nftlink.append(href)
四、额外注意事项
- 目标网站采用Angular框架(从class中的
ng-tns标识可判断),可能存在动态渲染逻辑,静态requests请求可能无法获取到实际渲染后的NFT列表内容。如果上述代码仍无法拿到数据,需要改用Selenium、Playwright等工具模拟浏览器加载页面后再提取内容。 - 注意网站反爬机制,避免频繁发起请求导致IP被封禁。
内容的提问来源于stack exchange,提问作者thepythonN00b
相关产品推荐
相关产品推荐

