【问题标题】:Save HTML Source Code to File将 HTML 源代码保存到文件
【发布时间】:2012-04-15 14:54:32
【问题描述】:

如何在 Python 3 中将网站的源代码复制到文本文件中?

编辑: 为了澄清我的问题,这就是我所拥有的:

import urllib.request

def extractHTML(url):
    f = open('temphtml.txt', 'w')
    page = urllib.request.urlopen(url)
    pagetext = page.read()
    f.write(pagetext)
    f.close()

extractHTML('http:www.google.com')

f.write() 函数出现以下错误:

builtins.TypeError: must be str, not bytes

【问题讨论】:

  • 你试过看这里吗?:stackoverflow.com/questions/5512811/…
  • 令人惊讶的是,没有一个答案(除了一个)实际上解决了这个问题。pagetext 不是字符串。它实际上是字节。因此,要将其转换为字符串,您需要使用 f.write(pagetext.decode('utf-8')) 将 UTF-8 编码的字符串写入文件。
  • @Brandon 我尝试了你所说的并得到一个错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 8482: invalid start byte。我只是在没有str() 的情况下直接抄下了我的答案,然后用f.write(pagetext.decode('utf-8')) 代替f.write(pagetext)。知道为什么这对我不起作用。如果您使用的是 Python 2,那可能就是原因

标签: python-3.x


【解决方案1】:
import urllib.request
site = urllib.request.urlopen('http://somesite.com')
data = site.read()
file = open("file.txt","wb") #open file in binary mode
file.writelines(data)
file.close()

未经测试,但应该可以工作。

编辑:为 python3 更新

【讨论】:

  • 糟糕,抱歉。 python 3有什么问题?
  • urllib2 不存在,对于初学者。我认为通常你会使用 urllib.request 模块(这就是 urlopen 现在所在的地方。)
  • 糟糕,现在 OP 更新了他们的帖子,这似乎是多余的。
  • 我想你会有同样的 str/bytes 问题。 HTTP 响应包含字节,但您已经打开了用于写入 str 的文件。最简单的方法就是以二进制模式打开文件(使用"wb")。
  • 使用 wb 给我这个 notalwaysright.com/page/1 的错误:TypeError: 'int' does not support the buffer interface
【解决方案2】:

可能你想创建类似的东西:

import urllib.request

class ExtractHtml():

    def Page(self):

        print("enter the web page name starting with 'http://': ")
        url=input()
        site=urllib.request.urlopen(url)
        data=site.read()
        file =open("D://python_projects/output.txt", "wb")
        file.write(data)
        file.close()






w=ExtractHtml()
w.Page()

【讨论】:

    【解决方案3】:

    试试这个。

    import urllib.request
    def extractHTML(url):
        urllib.request.urlretrieve(url, 'temphtml.txt')
    

    这更容易,但如果你仍然想这样做的话。这是解决方案:

    import urllib.request
    
    def extractHTML(url):
        f = open('temphtml.txt', 'w')
        page = urllib.request.urlopen(url)
        pagetext = str(page.read())
        f.write(pagetext)
        f.close()
    
    extractHTML('https://www.google.com')
    

    您的脚本出错,提示它必须是字符串。只需使用 str() 将字节转换为字符串即可。

    接下来我收到一条错误消息,提示未指定主机。 Google is a secured site so https: not http:,最重要的是你忘了在https: 的末尾加上//

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多