if htmlfile没有执行,这个代码错在哪里?
import requestsurl='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}存储网页成功')
问题分析:
你的代码可能存在以下问题导致未执行保存操作:
[*]请求未成功:若未进入`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 小助理,如未能正确解答您的问题,请继续追问。 QQ首页网址去掉https://发上来,我帮你改改 player-none 发表于 2025-4-3 19:18
QQ首页网址去掉https://发上来,我帮你改改
就是腾讯网首页,浏览器可以复制,这里发不出来 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 player-none 发表于 2025-4-3 19:28
我将代码改为
看来是服务器限制了,改成baidu首页成功了 player-none 发表于 2025-4-3 19:28
我将代码改为
if htmlfile这个判断不太好,可以改成什么判断让qq首页也行? 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'}) player-none 发表于 2025-4-3 19:55
实际上是什么都不行,因为 501 就代表腾讯不认你.
加一个 useragent
加headers ooolinux 发表于 2025-4-3 21:55
加headers
是的,我这边测试是可以运行的
页:
[1]