从URL读取HTML时,Python有时会返回奇怪的结果
我创建了一个从特定url读取HTML内容的函数。代码如下:从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) 但是,函数并不总是返回正确的字符串。在某些情况下,它返回一个非常长的
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教育文本造成的。无论如何,谢谢你的建议,先生。