You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取CSV中URL发起请求时出现编码报错的问题排查

问题根因与解决方案

你遇到的两类报错中,带\ufeff前缀导致的无匹配连接适配器问题,已经通过将CSV读取编码改为utf-8-sig解决,这是UTF-8 BOM格式文件的标准问题,无需额外调整。

剩余未解决的utf-8编解码器无法解码字节:无效起始字节报错和CSV读取编码无关,是网页请求、解码环节的逻辑问题,具体原因和修复方式如下:

报错核心原因

1688、淘宝等国内站点不会统一使用UTF-8编码,部分页面采用GBK、GB2312编码,硬编码用utf-8解码响应内容必然触发报错;另外默认配置的requests请求这类站点很容易触发反爬机制,返回的拦截响应本身是乱码、压缩二进制内容,也会导致解码失败。

分步修复方案

  • 第一步:补全基础请求头,避免被反爬拦截
    裸requests默认的请求特征会被站点直接识别为爬虫,返回非正常页面内容。请求时必须带上模拟浏览器的User-Agent,建议同时加超时配置避免程序卡死:
    import requests
    import lxml.html as html
    
    # 提前定义全局请求头和存储结果的列表
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
    }
    img_links = []
    
    def scraper():
        for i in range(len(rows)):
            try:
                # 带上请求头,设置10秒超时
                article = requests.get(rows[i][0], headers=headers, timeout=10) 
                if article.status_code == 200:
                    # 删除原硬编码utf-8解码逻辑,替换为自动探测编码
                    article.encoding = article.apparent_encoding
                    parsed = html.fromstring(article.text)
                    img_url = parsed.xpath(URL_1)
                    # 修正原写反的列表追加逻辑,用extend合并避免列表嵌套
                    img_links.extend(img_url)
                else:
                    raise ValueError(f"Error: {article.status_code!r}")
            except ValueError as ve:
                print(ve)
            except Exception as e:
                # 增加通用异常捕获,打印出错URL方便定位
                print(f"处理URL {rows[i][0]} 出错: {str(e)}")
    
  • 第二步:编码自动识别逻辑说明
    不要手动指定解码格式,requests自带的apparent_encoding属性是基于响应二进制内容,通过字符集检测算法计算出的页面真实编码,对GBK/GB2312/UTF-8的识别准确率远高于从响应头读取的编码值,可覆盖国内绝大多数主流站点的编码场景。
  • 第三步:残留问题定位方法
    如果改完后仍有个别URL报错,直接打印对应URL的响应内容前200个字节:
    print(article.content[:200])
    
    如果返回内容包含“验证码”“访问过于频繁”“滑块验证”类字样,说明触发了站点反爬,需要补充cookie、降低请求频率、增加代理才能正常获取内容,和编码逻辑无关。

额外注意

原代码中img_url.append(img_links)逻辑写反,xpath返回的是当前页匹配到的图片链接列表,正确逻辑是把当前页的结果追加到全局存储的img_links列表中,需用extend而非append,否则会出现列表嵌套问题。

内容的提问来源于stack exchange,提问作者Rothman Mariño

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:43:02