鱼C论坛

 找回密码
 立即注册
查看: 199|回复: 9

[已解决]if htmlfile没有执行,这个代码错在哪里?

[复制链接]
发表于 2025-4-3 19:16:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import requests

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

  3. htmlfile=None

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

  9. if htmlfile:
  10.     fn='out23_11.txt'
  11.     f=open(fn,'wb')
  12.     for part in htmlfile.iter_content(10240):
  13.         size=f.write(part)
  14.         print(size)
  15.     f.close()
  16.     print(f'以{fn}存储网页成功')
复制代码
最佳答案
2025-4-3 19:28:30
ooolinux 发表于 2025-4-3 19:22
就是腾讯网首页,浏览器可以复制,这里发不出来

我将代码改为

  1. import requests

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

  3. htmlfile=None

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

  9. print(htmlfile.status_code)
  10. print(bool(htmlfile))
  11. if htmlfile:
  12.     fn='out23_11.txt'
  13.     f=open(fn,'wb')
  14.     for part in htmlfile.iter_content(10240):
  15.         size=f.write(part)
  16.         print(size)
  17.     f.close()
  18.     print(f'以{fn}存储网页成功')
复制代码


它输出

  1. 网页下载成功
  2. 501
  3. False
复制代码


了解 501 Error
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-3 19:17:17 | 显示全部楼层
问题分析:

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

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


改进方案:


  1. import requests

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

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

  12. if htmlfile:
  13.     try:
  14.         with open('out23_11.txt', 'wb') as f:
  15.             for part in htmlfile.iter_content(10240):
  16.                 f.write(part)
  17.         print('存储成功')
  18.     except Exception as e:
  19.         print(f'存储失败:{e}')
复制代码


关键改进点:

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


验证步骤:

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-3 19:18:29 | 显示全部楼层
QQ首页网址去掉https://发上来,我帮你改改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-3 19:22:00 | 显示全部楼层
player-none 发表于 2025-4-3 19:18
QQ首页网址去掉https://发上来,我帮你改改

就是腾讯网首页,浏览器可以复制,这里发不出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-3 19:28:30 | 显示全部楼层    本楼为最佳答案   
ooolinux 发表于 2025-4-3 19:22
就是腾讯网首页,浏览器可以复制,这里发不出来

我将代码改为

  1. import requests

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

  3. htmlfile=None

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

  9. print(htmlfile.status_code)
  10. print(bool(htmlfile))
  11. if htmlfile:
  12.     fn='out23_11.txt'
  13.     f=open(fn,'wb')
  14.     for part in htmlfile.iter_content(10240):
  15.         size=f.write(part)
  16.         print(size)
  17.     f.close()
  18.     print(f'以{fn}存储网页成功')
复制代码


它输出

  1. 网页下载成功
  2. 501
  3. False
复制代码


了解 501 Error
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-3 19:46:38 | 显示全部楼层

看来是服务器限制了,改成baidu首页成功了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-3 19:51:20 | 显示全部楼层

if htmlfile这个判断不太好,可以改成什么判断让qq首页也行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-3 19:55:43 | 显示全部楼层
ooolinux 发表于 2025-4-3 19:51
if htmlfile这个判断不太好,可以改成什么判断让qq首页也行?

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

加一个 useragent
  1. 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'})
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-3 21:55:09 | 显示全部楼层
player-none 发表于 2025-4-3 19:55
实际上是什么都不行,因为 501 就代表腾讯不认你.

加一个 useragent

加headers
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-3 22:07:13 | 显示全部楼层

是的,我这边测试是可以运行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-25 22:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表