鱼C论坛

 找回密码
 立即注册
查看: 1869|回复: 8

[已解决]为什么运行后找不到保存的html.txt文件

[复制链接]
发表于 2020-9-25 20:30:03 | 显示全部楼层 |阅读模式

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

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

x

QQ截图20200925202639.png
import requests

def gethtml():

    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"}
    r=requests.get(url,headers=headers)
    return r.text
def main():
    url="http://www.shanghairanking.cn/rankings/bcur/2020"
    html=gethtml(url)
    with open("html.txt","w",encoding="utf-8") as file:
        file.write(html.txt)
        file.close()
if __name__=="main":
       main()

最佳答案
2020-9-25 20:33:54
本帖最后由 Twilight6 于 2020-9-25 22:02 编辑

[b]

你的代码有明显的错误,红色波浪线都提示了

你定义的 gethtml 函数没有设置传入参数,而你 main 函数调用时候传入了

而且 gethtml 函数返回的是 .text 格式了,而你 file.write 时候写入的是 html.txt ,应该把 .txt 去掉

参考代码:
import requests

def gethtml(url):
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"}
    r=requests.get(url,headers=headers)
    return r.text

def main():
    url="http://www.shanghairanking.cn/rankings/bcur/2020"
    html=gethtml(url)
    with open("html.txt","w",encoding="utf-8") as file:
        file.write(html)
        file.close()
if __name__ == '__main__':
       main()

补上楼下提出的错误,if __name__ == 'main': 要改成 if __name__ == '__main__':

[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-25 20:33:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-9-25 22:02 编辑

[b]

你的代码有明显的错误,红色波浪线都提示了

你定义的 gethtml 函数没有设置传入参数,而你 main 函数调用时候传入了

而且 gethtml 函数返回的是 .text 格式了,而你 file.write 时候写入的是 html.txt ,应该把 .txt 去掉

参考代码:
import requests

def gethtml(url):
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"}
    r=requests.get(url,headers=headers)
    return r.text

def main():
    url="http://www.shanghairanking.cn/rankings/bcur/2020"
    html=gethtml(url)
    with open("html.txt","w",encoding="utf-8") as file:
        file.write(html)
        file.close()
if __name__ == '__main__':
       main()

补上楼下提出的错误,if __name__ == 'main': 要改成 if __name__ == '__main__':

[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-25 21:25:44 | 显示全部楼层
Twilight6 发表于 2020-9-25 20:33
你的代码有明显的错误,红色波浪线都提示了

你定义的 gethtml 函数没有设置传入参数,而你 main 函 ...
if __name__=="main":
好像这里加了这句话,反倒不执行任何代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 21:27:30 | 显示全部楼层
还有最好用content.decode(),用text好像解码错误
import requests


def gethtml(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"}
    r = requests.get(url, headers=headers)
    print(r.content.decode())
    return r.content.decode()


def main():
    url = "http://www.shanghairanking.cn/rankings/bcur/2020"
    html = gethtml(url)
    with open("html.txt", "w", encoding="utf-8") as file:
        file.write(html)
        file.close()

main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 21:36:13 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-25 21:47 编辑

看了一下这个网页,其实你要获取数据
http://www.shanghairanking.cn/_nuxt/static/1600422029/rankings/bcur/2020/payload.js

在检查里network搜一下playload,可以看到很多网页,就是网站上的各种数据

可以试着用正则来提取
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 22:03:56 | 显示全部楼层
疾风怪盗 发表于 2020-9-25 21:25
好像这里加了这句话,反倒不执行任何代码了



确实,没注意道这个了,把'main' 加上双下划线就行了 '__main__'

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 23:16:53 | 显示全部楼层
Twilight6 发表于 2020-9-25 22:03
确实,没注意道这个了,把'main' 加上双下划线就行了 '__main__'

我也没注意是下划线的原因。。。。。这个不是自动补全的么。。。。。。。
不加这句也没问题。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 01:35:20 | 显示全部楼层
疾风怪盗 发表于 2020-9-25 23:16
我也没注意是下划线的原因。。。。。这个不是自动补全的么。。。。。。。
不加这句也没问题。 ...



自动补全是你 PyCharm 之类的编辑器用习惯了吧哈哈,正常,可以不加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 13:54:35 | 显示全部楼层
鱼油你好,红色的波浪线就是你的错误,你仔细对照你的代码看看,是不是你定义的 gethtml 函数没有设置传入参数,但是到了你 main 函数调用时候却传入了,而且 gethtml 函数返回的是 .text 格式了,而你 file.write 时候写入的是 html.txt ,应该把 .txt 去掉。或者使用我给你的这个代码,我个人改进了一下,感觉要更好一些,不容易出现格式错误。
import requests


def gethtml(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"}
    r = requests.get(url, headers=headers)
    print(r.content.decode())
    return r.content.decode()


def main():
    url = "http://www.shanghairanking.cn/rankings/bcur/2020"
    html = gethtml(url)
    with open("html.txt", "w", encoding="utf-8") as file:
        file.write(html)
        file.close()

main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 04:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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