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

为何write()方法每次迭代写入的数据量均相同?

为什么write()每次写入的数据量都相同?

看起来你遇到的情况是每次调用fw.write(data.content)返回的写入字节数都一样,这大概率不是write()方法的问题,而是你通过c.get()获取的内容本身就每次都相同。咱们来一步步分析:

最可能的原因:请求未成功获取目标文件

你的代码里用c.get(direct_links[x])获取文件内容,但如果这个请求没有拿到真正的附件,反而每次都返回了相同的错误响应内容,那data.content的大小自然固定,导致写入的字节数一致。常见的场景有:

  • 权限/登录问题:网站需要登录才能下载附件,但你的session c没有携带有效的登录Cookie,每次请求都返回登录提示页面或者权限不足的页面,这些页面的大小通常是固定的。
  • 反爬拦截:你的请求没有设置必要的请求头(比如User-Agent、Accept),被网站识别为爬虫,每次返回相同的拦截页面(比如403错误页面)。
  • 链接无效:direct_links里的链接可能已经失效,或者指向了同一个错误页面。

排查和解决步骤

  • 检查响应状态码:在data = c.get(direct_links[x])之后添加状态码打印,快速判断请求是否成功:
    print(f"请求状态码:{data.status_code},目标链接:{direct_links[x]}")
    
    如果状态码不是200(比如401未授权、403禁止访问、404不存在),那请求肯定出问题了。
  • 查看响应内容:打印响应的前几百字节,确认拿到的是不是目标文件:
    print(data.content[:500])  # 输出前500字节内容,判断是文件还是错误页面
    
    如果输出的是HTML代码(比如登录表单、错误提示),说明你获取的不是预期的附件。
  • 添加请求头模拟浏览器:给session c配置浏览器风格的请求头,避免被反爬拦截:
    c.headers.update({
        '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',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    })
    
  • 确认Session登录状态:如果网站需要登录才能下载,确保你在发起下载请求前已经通过c.post()完成登录,且Cookie已正确保存到session中。
  • 验证direct_links列表:检查列表中的每个链接是否都是不同的有效下载地址,没有重复或错误链接。

小提示

你的代码里有个逻辑小问题:print("After writing file : {}".format(direct_links[x]))这句话写在了写入文件之前,应该放到fw.write(data.content)之后,这样打印的内容才符合"写入后"的语境,不过这和当前的写入字节数问题无关~

内容的提问来源于stack exchange,提问作者Aakash Hirve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:46:13