闻雨 发表于 2020-9-25 20:30:03

为什么运行后找不到保存的html.txt文件



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()

Twilight6 发表于 2020-9-25 20:33:54

本帖最后由 Twilight6 于 2020-9-25 22:02 编辑



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

你定义的 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__':

疾风怪盗 发表于 2020-9-25 21:25:44

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

你定义的 gethtml 函数没有设置传入参数,而你 main 函 ...

if __name__=="main":
好像这里加了这句话,反倒不执行任何代码了

疾风怪盗 发表于 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()

疾风怪盗 发表于 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,可以看到很多网页,就是网站上的各种数据

可以试着用正则来提取

Twilight6 发表于 2020-9-25 22:03:56

疾风怪盗 发表于 2020-9-25 21:25
好像这里加了这句话,反倒不执行任何代码了



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

疾风怪盗 发表于 2020-9-25 23:16:53

Twilight6 发表于 2020-9-25 22:03
确实,没注意道这个了,把'main' 加上双下划线就行了 '__main__'

{:10_284:}我也没注意是下划线的原因。。。。。这个不是自动补全的么。。。。。。。
不加这句也没问题。。。。。。。。

Twilight6 发表于 2020-9-26 01:35:20

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



自动补全是你 PyCharm 之类的编辑器用习惯了吧哈哈,正常,可以不加

一抹心尘 发表于 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()
页: [1]
查看完整版本: 为什么运行后找不到保存的html.txt文件