鱼C论坛

 找回密码
 立即注册
查看: 383|回复: 4

[已解决]with写入文件但是运行完后没东西

[复制链接]
发表于 2024-8-5 10:46:26 | 显示全部楼层 |阅读模式

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

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

x
import urllib.request as request
res=request.urlopen("http://www.baidu.com")
print(res.read().decode("utf-8"))

with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(res.read().decode("utf-8"))
如题,我用with保存我爬回来的网页代码想把它保存进“baidu.html”里,但我运行完打开这个html文件发现是空的,请问这个是什么原因导致的啊,有什么解决方法吗
最佳答案
2024-8-5 15:30:40
sunshine_8205 发表于 2024-08-05 15:27
import urllib.request as request
res=request.urlo ...


这段代码看起来很有趣,但有一个小错误,让它无法成功运行并获得最终需要的结果。让我来用幽默的方式给你解释一下。

首先,这行代码:
res=request.urlopen("http://www.baidu.com")
print(res.read().decode("utf-8"))

是用来打开百度网站并打印出网页内容的。这一部分是没问题的,你可以看到网页的内容,就像打开一个窗户透透气。

但是,接下来的这段代码:
with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(res.read().decode("utf-8"))

的问题出现在 `res.read()` 这一行。你难道不知道吗?在第一次调用 `read()` 方法后,`res` 对象的内容就像吃光了的披萨,只剩下空盘子了!所以当你再次调用 `res.read()` 时,它会告诉你:“很抱歉,我已经没有东西可供你享用了。”

为了避免这个问题,你只需要在第一次读取内容时,把它存到一个变量里,比如:
import urllib.request as request

# 打开网页并读取内容
res = request.urlopen("http://www.baidu.com")
content = res.read().decode("utf-8")

# 打印内容
print(content)

# 将内容写入文件
with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(content)

这样就能确保你在需要的时候都有足够的数据,不会让你的代码像表演魔术一样留下一片空白。而且这样做的好处是,你不仅能打印网页内容,还能把它妥妥地写入文件中,简直就是双赢!

记住,编程就像烹饪,操作顺序和材料准备都很重要,不然做出来的“菜”就会不美味哦!希望你能在编程的“厨房”中继续大展身手!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
2024-08-05_10h44_18.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-8-5 15:25:55 | 显示全部楼层
import urllib.request as request
res=request.urlopen("http://www.baidu.com")
print(res.read().decode("utf-8"))

with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(res.read().decode("utf-8"))
@fishC  以上的代码是否能成功运行,并获得最终需要的结果?是否有问题?为什么会出现这样的问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-5 15:27:10 | 显示全部楼层
import urllib.request as request
res=request.urlopen("http://www.baidu.com")
print(res.read().decode("utf-8"))

with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(res.read().decode("utf-8"))
@fishC  以上的代码是否能成功运行,并获得最终需要的结果?是否有问题?为什么会出现这样的问题?
@FISHC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-5 15:30:40 | 显示全部楼层    本楼为最佳答案   
sunshine_8205 发表于 2024-08-05 15:27
import urllib.request as request
res=request.urlo ...


这段代码看起来很有趣,但有一个小错误,让它无法成功运行并获得最终需要的结果。让我来用幽默的方式给你解释一下。

首先,这行代码:
res=request.urlopen("http://www.baidu.com")
print(res.read().decode("utf-8"))

是用来打开百度网站并打印出网页内容的。这一部分是没问题的,你可以看到网页的内容,就像打开一个窗户透透气。

但是,接下来的这段代码:
with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(res.read().decode("utf-8"))

的问题出现在 `res.read()` 这一行。你难道不知道吗?在第一次调用 `read()` 方法后,`res` 对象的内容就像吃光了的披萨,只剩下空盘子了!所以当你再次调用 `res.read()` 时,它会告诉你:“很抱歉,我已经没有东西可供你享用了。”

为了避免这个问题,你只需要在第一次读取内容时,把它存到一个变量里,比如:
import urllib.request as request

# 打开网页并读取内容
res = request.urlopen("http://www.baidu.com")
content = res.read().decode("utf-8")

# 打印内容
print(content)

# 将内容写入文件
with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(content)

这样就能确保你在需要的时候都有足够的数据,不会让你的代码像表演魔术一样留下一片空白。而且这样做的好处是,你不仅能打印网页内容,还能把它妥妥地写入文件中,简直就是双赢!

记住,编程就像烹饪,操作顺序和材料准备都很重要,不然做出来的“菜”就会不美味哦!希望你能在编程的“厨房”中继续大展身手!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-5 15:31:47 | 显示全部楼层
sunshine_8205 发表于 2024-08-05 15:27
import urllib.request as request
res=request.urlo ...


这段代码的目的是从百度获取网页内容并将其保存到本地文件`baidu.html`中,但实际上它会出现问题。让我来轻松地为你揭示其中的幽默之处!

1. **的问题**:你在调用 `res.read().decode("utf-8")` 读取内容后,已经把网页内容读取了一次,并且在接下来的文件写入中再次调用了 `res.read()`。但是,`res.read()` 只会读取一次,之后它的“肚子空了”,再读取就会返回空内容。

2. **代码修复**:为了确保能成功地将内容写入文件,你可以先将读取的内容存储到一个变量中,然后再写入文件。下面是修复后的代码:
import urllib.request as request

# 获取网页内容
res = request.urlopen("http://www.baidu.com")
html_content = res.read().decode("utf-8")  # 读取网页内容并解码为字符串

# 打印网页内容
print(html_content)

# 将网页内容写入到本地文件
with open("baidu.html", mode="w", encoding="utf-8") as f:
    f.write(html_content)  # 使用之前存储好的内容

3. **总结**:这样,你就可以顺利获得百度的网页内容,并将其写入到 `baidu.html` 文件中,而不会有“内容空空如也”的尴尬场面!希望这个回答让你觉得轻松愉快,也能解决问题!如果还有其他疑问,就随时问我吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 16:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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