ooolinux 发表于 2025-4-3 19:16:02

if htmlfile没有执行,这个代码错在哪里?

import requests

url='qq首页网址发不上来'

htmlfile=None

try:
    htmlfile=requests.get(url)
    print('网页下载成功')
except Exception as err:
    print(f'网页下载失败:{err}')

if htmlfile:
    fn='out23_11.txt'
    f=open(fn,'wb')
    for part in htmlfile.iter_content(10240):
      size=f.write(part)
      print(size)
    f.close()
    print(f'以{fn}存储网页成功')

FishC 发表于 2025-4-3 19:17:17

问题分析:

你的代码可能存在以下问题导致未执行保存操作:


[*]请求未成功:若未进入`try`块中的`print('网页下载成功')`,说明请求失败,此时`htmlfile`仍为None
[*]URL格式错误:缺少协议头(如写成`www.qq.com`而非`https://www.qq.com`)
[*]SSL验证失败:部分网站需要关闭证书验证
[*]未处理HTTP错误状态码:如403/404等状态码不会触发请求异常


改进方案:


import requests

url = 'https://www.qq.com'# 确保包含https://

try:
    # 添加超时和SSL验证参数
    htmlfile = requests.get(url, timeout=5, verify=True)
    # 主动检查HTTP状态码
    htmlfile.raise_for_status()
    print('网页下载成功')
except Exception as err:
    print(f'请求失败:{err}')
    htmlfile = None# 显式重置为None

if htmlfile:
    try:
      with open('out23_11.txt', 'wb') as f:
            for part in htmlfile.iter_content(10240):
                f.write(part)
      print('存储成功')
    except Exception as e:
      print(f'存储失败:{e}')


关键改进点:


[*]添加timeout=5防止长时间无响应
[*]使用raise_for_status()主动抛出HTTP错误
[*]使用with open确保文件正确关闭
[*]增加存储部分的异常处理
[*]显式将失败的htmlfile设为None


验证步骤:

1. 检查控制台输出是否显示"网页下载成功"
2. 若出现错误信息,根据提示排查网络连接或URL有效性
3. 尝试用浏览器直接访问你写的URL进行验证

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-4-3 19:18:29

QQ首页网址去掉https://发上来,我帮你改改

ooolinux 发表于 2025-4-3 19:22:00

player-none 发表于 2025-4-3 19:18
QQ首页网址去掉https://发上来,我帮你改改

就是腾讯网首页,浏览器可以复制,这里发不出来

player-none 发表于 2025-4-3 19:28:30

ooolinux 发表于 2025-4-3 19:22
就是腾讯网首页,浏览器可以复制,这里发不出来

我将代码改为

import requests

url='https://www.qq.com'

htmlfile=None

try:
    htmlfile=requests.get(url)
    print('网页下载成功')
except Exception as err:
    print(f'网页下载失败:{err}')

print(htmlfile.status_code)
print(bool(htmlfile))
if htmlfile:
    fn='out23_11.txt'
    f=open(fn,'wb')
    for part in htmlfile.iter_content(10240):
      size=f.write(part)
      print(size)
    f.close()
    print(f'以{fn}存储网页成功')


它输出

网页下载成功
501
False

了解 501 Error

ooolinux 发表于 2025-4-3 19:46:38

player-none 发表于 2025-4-3 19:28
我将代码改为




看来是服务器限制了,改成baidu首页成功了

ooolinux 发表于 2025-4-3 19:51:20

player-none 发表于 2025-4-3 19:28
我将代码改为




if htmlfile这个判断不太好,可以改成什么判断让qq首页也行?

player-none 发表于 2025-4-3 19:55:43

ooolinux 发表于 2025-4-3 19:51
if htmlfile这个判断不太好,可以改成什么判断让qq首页也行?

实际上是什么都不行,因为 501 就代表腾讯不认你.

加一个 useragent
htmlfile=requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36'})

ooolinux 发表于 2025-4-3 21:55:09

player-none 发表于 2025-4-3 19:55
实际上是什么都不行,因为 501 就代表腾讯不认你.

加一个 useragent

加headers

player-none 发表于 2025-4-3 22:07:13

ooolinux 发表于 2025-4-3 21:55
加headers

是的,我这边测试是可以运行的
页: [1]
查看完整版本: if htmlfile没有执行,这个代码错在哪里?