Python 3.6.3(Anaconda/Spyder)运行爬虫代码无打印输出求助
排查Spyder中Python爬虫无输出无报错的问题
这种运行后没反应、既不报错也不输出的情况,大概率是请求被拦截、页面结构变化,或者输出没正常显示导致的,我给你拆解几个常见原因和解决办法:
1. 网站反爬机制拦截了你的请求
直接用urllib.request.urlopen发送请求时,默认没有携带浏览器标识(User-Agent),很容易被网站的反爬系统识别为爬虫,返回空页面或空白内容,但不会抛出异常,自然就没东西可解析输出。
解决办法:添加请求头模拟浏览器访问
修改请求部分的代码,用Request对象带上常见的浏览器请求头:
from urllib.request import Request, urlopen as uReq my_url = 'https://www.newegg.com/Power-Banks/SubCategory/ID-3724?cm_sp=Cat_Batteries-Power-Banks-Chargers_1-_-VisNav-_-Power-Banks' # 模拟Chrome浏览器的请求头 req = Request(my_url, 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'}) uClient = uReq(req) page_html = uClient.read() uClient.close()
2. 目标网站的页面结构已经更新
你代码里依赖的item-container类可能已经被网站修改了,导致containers = page_soup.findAll("div",{"class":"item-container"})返回空列表,循环根本没执行,所以没输出。
解决办法:检查当前页面的真实结构
- 打开目标网站,按F12调出开发者工具;
- 用“选择元素”工具点击一个产品卡片,查看它的外层容器的class名称(比如现在可能是
item-cell或其他新名称); - 修改代码中
findAll的参数,匹配新的class。
另外,建议在代码里加一行调试输出,确认是否拿到了容器:
containers = page_soup.findAll("div",{"class":"item-container"}) print(f"找到 {len(containers)} 个产品容器") # 如果输出0,就说明元素没匹配到
3. Spyder的输出窗口存在显示问题
有时候Spyder的Console会出现输出缓存或延迟的情况,导致你看不到正常输出。
解决办法:
- 在代码最后加一行
print("爬虫执行完毕!"),测试基础输出是否正常; - 切换到Spyder的IPython Console运行代码,或者重启Spyder再试;
- 检查Console的输出设置(默认是开启的,但偶尔会出现异常)。
4. 网络连接超时或失败
如果你的网络不稳定,或者网站访问缓慢,urlopen可能会卡住,一直处于等待响应的状态,看起来就像“无反应”。
解决办法:添加超时时间
在请求时加上超时参数,比如10秒,超过时间没响应就会抛出异常,帮你快速定位问题:
uClient = uReq(req, timeout=10) # 超时10秒触发报错
你可以先从添加请求头和调试输出这两步开始排查,应该能很快找到问题所在。
内容的提问来源于stack exchange,提问作者hallkevi
相关产品推荐
相关产品推荐

