Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从URL读取HTML时,Python有时会返回奇怪的结果_Python_Html_Url - Fatal编程技术网

从URL读取HTML时,Python有时会返回奇怪的结果

从URL读取HTML时,Python有时会返回奇怪的结果,python,html,url,Python,Html,Url,我创建了一个从特定url读取HTML内容的函数。代码如下: def __retrieve_html(self, address): html = urllib.request.urlopen(address).read() Helper.log('HTML length', len(html)) Helper.log('HTML content', html) return str(html) 但是,函数并不总是返回正确的字符串。在某些情况下,它返回一个非常长的

我创建了一个从特定url读取HTML内容的函数。代码如下:

def __retrieve_html(self, address):
    html = urllib.request.urlopen(address).read()
    Helper.log('HTML length', len(html))
    Helper.log('HTML content', html)
    return str(html)
但是,函数并不总是返回正确的字符串。在某些情况下,它返回一个非常长的奇怪字符串

例如,如果我使用URL:
http://www.merdeka.com
,有时会给出正确的html字符串,但有时也会返回如下结果:

HTML content: b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed\xfdyW\x1c\xb7\xd28\x8e\xffm\x9f\x93\xf7\xa0;y>\xc1\xbeA\xcc\xc2b\x03\x86\x1cl\xb0\x8d1\x86\x038yr\......Very long and much more characters.

这似乎只发生在任何有很多内容的页面上。对于像Facebook.com登录页面和Google.com索引这样的简单页面,这种情况从未发生过。这是什么?我的错误在哪里?如何处理?

您得到的是字节而不是字符串,因为urrlib无法为您解码响应。这可能是因为某些站点在其内容类型头中省略了编码声明

例如,google.com有:

内容类型:text/html;字符集=UTF-8

该网站刚刚:

内容类型:text/html

因此,您需要手动解码响应,例如使用utf-8编码

html = urllib.request.urlopen(address).read().decode('utf-8')
问题是您需要设置正确的编码,如果它不在服务器头中,您需要以某种方式猜测它

有关更多信息,请参见此问题


PS:考虑从一些不受欢迎的<代码> URLLIB < /代码>移动到<代码>请求< /COD> LIB。此时它更简单、更时尚、更性感:)

您得到的是字节而不是字符串,因为urrlib无法为您解码响应。这可能是因为某些站点在其内容类型头中省略了编码声明

例如,google.com有:

内容类型:text/html;字符集=UTF-8

该网站刚刚:

内容类型:text/html

因此,您需要手动解码响应,例如使用utf-8编码

html = urllib.request.urlopen(address).read().decode('utf-8')
问题是您需要设置正确的编码,如果它不在服务器头中,您需要以某种方式猜测它

有关更多信息,请参见此问题


PS:考虑从一些不受欢迎的<代码> URLLIB < /代码>移动到<代码>请求< /COD> LIB。此时它更简单、更时尚、更性感:)

您得到的是字节而不是字符串,因为urrlib无法为您解码响应。这可能是因为某些站点在其内容类型头中省略了编码声明

例如,google.com有:

内容类型:text/html;字符集=UTF-8

该网站刚刚:

内容类型:text/html

因此,您需要手动解码响应,例如使用utf-8编码

html = urllib.request.urlopen(address).read().decode('utf-8')
问题是您需要设置正确的编码,如果它不在服务器头中,您需要以某种方式猜测它

有关更多信息,请参见此问题


PS:考虑从一些不受欢迎的<代码> URLLIB < /代码>移动到<代码>请求< /COD> LIB。此时它更简单、更时尚、更性感:)

您得到的是字节而不是字符串,因为urrlib无法为您解码响应。这可能是因为某些站点在其内容类型头中省略了编码声明

例如,google.com有:

内容类型:text/html;字符集=UTF-8

该网站刚刚:

内容类型:text/html

因此,您需要手动解码响应,例如使用utf-8编码

html = urllib.request.urlopen(address).read().decode('utf-8')
问题是您需要设置正确的编码,如果它不在服务器头中,您需要以某种方式猜测它

有关更多信息,请参见此问题


PS:考虑从一些不受欢迎的<代码> URLLIB < /代码>移动到<代码>请求< /COD> LIB。此时它更简单、更时尚、更性感:)

似乎来自Gzip的响应被压缩了

尝试一下:

import gzip
import urllib.request
def __retrieve_html(self, address):
    with urllib.request.urlopen(address) as resp:
        html = resp.read()
        Helper.log('HTML length', len(html))
        Helper.log('HTML content', html)
        if resp.info().get('Content-Encoding') == 'gzip':
            html = gzip.decompress(html)
        return html
如何解码你的
html
对象,我留给你作为练习

或者,您也可以使用“请求”模块:

安装时请使用:

pip install requests
然后执行如下操作:

import requests
r = requests.get('http://www.merdeka.com')
r.text

请求似乎与来自的响应没有任何问题。来自的响应似乎是压缩的

尝试一下:

import gzip
import urllib.request
def __retrieve_html(self, address):
    with urllib.request.urlopen(address) as resp:
        html = resp.read()
        Helper.log('HTML length', len(html))
        Helper.log('HTML content', html)
        if resp.info().get('Content-Encoding') == 'gzip':
            html = gzip.decompress(html)
        return html
如何解码你的
html
对象,我留给你作为练习

或者,您也可以使用“请求”模块:

安装时请使用:

pip install requests
然后执行如下操作:

import requests
r = requests.get('http://www.merdeka.com')
r.text

请求似乎与来自的响应没有任何问题。来自的响应似乎是压缩的

尝试一下:

import gzip
import urllib.request
def __retrieve_html(self, address):
    with urllib.request.urlopen(address) as resp:
        html = resp.read()
        Helper.log('HTML length', len(html))
        Helper.log('HTML content', html)
        if resp.info().get('Content-Encoding') == 'gzip':
            html = gzip.decompress(html)
        return html
如何解码你的
html
对象,我留给你作为练习

或者,您也可以使用“请求”模块:

安装时请使用:

pip install requests
然后执行如下操作:

import requests
r = requests.get('http://www.merdeka.com')
r.text

请求似乎与来自的响应没有任何问题。来自的响应似乎是压缩的

尝试一下:

import gzip
import urllib.request
def __retrieve_html(self, address):
    with urllib.request.urlopen(address) as resp:
        html = resp.read()
        Helper.log('HTML length', len(html))
        Helper.log('HTML content', html)
        if resp.info().get('Content-Encoding') == 'gzip':
            html = gzip.decompress(html)
        return html
如何解码你的
html
对象,我留给你作为练习

或者,您也可以使用“请求”模块:

安装时请使用:

pip install requests
然后执行如下操作:

import requests
r = requests.get('http://www.merdeka.com')
r.text

请求与来自

的响应似乎没有任何问题。显然,问题确实是由gzip ed文本造成的。不管怎样,谢谢你的建议,先生。很显然,这个问题确实是由于gzip教育文本造成的。不管怎样,谢谢你的建议,先生。很显然,这个问题确实是由于gzip教育文本造成的。不管怎样,谢谢你的建议,先生。很显然,这个问题确实是由于gzip教育文本造成的。无论如何,谢谢你的建议,先生。