如何解决重定向中的编码问题



我试图抓取的一个网站似乎有编码问题。页面声明,它们是用utf-8编码的,但如果我试图抓取它们并使用请求获取html源,重定向地址包含一个编码,而不是utf-8。浏览器似乎是宽容的,所以他们会自动修复这个问题,但python请求包会遇到异常。

我的代码如下:

res= rq.get(url, allow_redirects=True)

当尝试解码以下代码中的重定向字符串(隐藏在请求包中的某个位置(时,会遇到异常:

string.decode(encoding)

其中string是重定向字符串,编码为"utf8":

string= b'/aktien/hermxe8s-aktie'

我发现,编码实际上是在类似"Windows-1252"的东西中编码的。实际上重定向应该在"/aktien/herm%C3%A8s aktie"上进行。

现在我的问题是:我如何才能得到对此类编码错误(如浏览器(更宽容的请求,或者我如何才能传递编码?

我搜索了编码设置,但到目前为止,请求总是根据结果自动执行。

Btw。重定向的结果页面以开头(它实际上声明为utf-8(

<!DOCTYPE html><html lang="de" prefix="og: http://ogp.me/ns#"><head><meta charset="utf-8">

您可以在requests.get()方法中使用hooks=参数,并显式地对LocationHTTP标头进行url编码。例如:

import requests
import urllib.parse
url = "<YOUR URL FROM EXAMPLE>"

def response_hook(hook_data, **kwargs):
if "Location" in hook_data.headers:
hook_data.headers["Location"] = urllib.parse.quote(
hook_data.headers["Location"]
)

res = requests.get(url, allow_redirects=True, hooks={"response": response_hook})
print(res.url)

打印:

https://.../herm%C3%A8s-aktie

最新更新