网页爬取报错:'NoneType' object has no attribute 'text'及循环异常求助
爬取Jumia尼日利亚Computing页面的问题解决办法
1. 先搞定低级拼写错误
你提到把.text误写成.test,这是直接触发错误的原因之一,先全局替换代码里所有的.test为.text即可。
2. 解决AttributeError: 'NoneType' object has no attribute 'text'
这个错误的核心是:你要提取文本的元素未找到,返回了None,此时调用.text必然报错。解决步骤如下:
- 重新核对元素选择器:打开目标页面按F12,重新定位商品卡片、名称、价格等元素的CSS选择器/XPath。Jumia页面结构会定期更新,旧选择器大概率已失效。
- 处理动态加载内容:如果用
requests发送静态请求,无法获取JS渲染的商品数据,此时建议换用Selenium或Playwright模拟浏览器加载,确保能拿到完整的页面DOM结构。 - 添加元素存在判断:提取文本前先检查元素是否存在,避免直接硬调用属性,示例代码:
price_tag = item.find('span', class_='prc') price = price_tag.text.strip() if price_tag else '暂无价格'
- 设置防反爬请求头:给请求添加真实的User-Agent,避免被网站识别为爬虫,示例:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36' } resp = requests.get('https://www.jumia.com.ng/computing/', headers=headers)
3. 解决循环未正常执行问题
循环不执行基本是因为你要遍历的元素列表为空(比如items = soup.find_all(...)返回空列表),原因和上述元素找不到的情况一致:
- 先确认选择器能正确获取目标列表,可通过打印
len(items)查看是否有数据 - 若为动态加载问题,使用浏览器渲染工具获取完整页面后再解析
- 调试时多打印中间结果,排查是请求未拿到正确页面,还是选择器书写错误
参考修正代码(用Selenium)
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service import time # 启动Chrome浏览器 driver = webdriver.Chrome(service=Service('chromedriver.exe')) driver.get('https://www.jumia.com.ng/computing/') time.sleep(3) # 等待页面加载完成,避免因未加载完全拿不到元素 # 获取所有商品卡片 goods_list = driver.find_elements(By.CSS_SELECTOR, 'article.prd._fb.col.c-prd') for goods in goods_list: # 提取商品名称 name_elem = goods.find_element(By.CSS_SELECTOR, 'h3.name') goods_name = name_elem.text.strip() if name_elem else '无名称' # 提取价格 price_elem = goods.find_element(By.CSS_SELECTOR, 'span.prc') goods_price = price_elem.text.strip() if price_elem else '无价格' print(f"商品: {goods_name} | 价格: {goods_price}") driver.quit()
内容的提问来源于stack exchange,提问作者Kabiru Shuaibu
相关产品推荐
相关产品推荐

