You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python Requests下载NBA球员图片时报错,求助排查问题

解决NBA球员头像下载时的代码错误

嘿,我帮你排查了下代码里的问题,主要有几个关键错误导致第17行报错,咱们一步步解决:

问题分析

  1. 文件打开模式错误:你用'w'(文本模式)打开文件来写图片,但图片是二进制数据,文本模式会把二进制内容当成字符串处理,必然会报错。
  2. URL拼接逻辑错误:NBA官网的图片src本身已经是带https://的完整链接,你硬加http://会变成http://https://xxx这种无效URL,请求自然失败。
  3. 浏览器退出方式不正确driver.__exit__()不是关闭浏览器的正确方法,应该用官方推荐的driver.quit()

修正后的完整代码

from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import os

# 初始化Chrome浏览器
driver = webdriver.Chrome(executable_path=r'E:/Summer/FirstThings/Web scraping (bucky + pdf)/webscraping/tutorials-master/chromedriver.exe')
url = 'https://www.nba.com/players/jaylen/adams/1629121'
driver.get(url)

# 解析页面源码
soup = BeautifulSoup(driver.page_source, 'lxml')
div = soup.find('section', class_='nba-player-header__item nba-player-header__headshot')
img = div.find('img')

# 处理图片URL,避免重复添加协议头
img_src = img['src']
# 检查URL是否已有合法协议头,没有的话再补全
if not img_src.startswith(('http://', 'https://')):
    img_src = f'https://{img_src.lstrip("/")}'

# 用二进制模式写入图片,同时用with语句自动管理文件
with open('jaylen_adams.jpg', 'wb') as f:
    # 可选:添加请求头模拟浏览器,避免被反爬拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    f.write(requests.get(img_src, headers=headers).content)

# 正确关闭浏览器进程
driver.quit()

关键修改说明

  • 改用wb模式写入文件:二进制写入模式专门用来处理图片、视频这类非文本数据,彻底解决编码报错问题。
  • URL合法性校验:先判断链接是否已有HTTP/HTTPS协议头,避免拼接出无效URL,适配更多场景。
  • 使用with语句管理文件:不用手动调用f.close(),Python会自动帮你关闭文件,避免资源泄漏。
  • 添加请求头(可选):模拟真实浏览器请求,降低被网站反爬机制拦截的概率。
  • driver.quit()关闭浏览器:彻底终止浏览器进程,释放系统资源,这是Selenium的标准退出方式。

内容的提问来源于stack exchange,提问作者haroon khan

火山引擎 最新活动