2017-04-02 81 views
0

虽然试图获得...“学术”网站的HTML源,但我在解码时遇到了问题。我使用的请求命令:解码字节似乎没有解码

resp = requests.get(url) 
print(resp.content) 

编辑:我曾尝试resp.text

的结果是这样的:

"b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\". 

字节。凉。我尝试使用.decode("format")提及各种格式hereiso,latin,utf, cp)但我没有运气。

下面是其中一些印刷的:

UTF-8:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte 

拉丁-1:

"ÿØÿàJFIFÿÛC   2! !222222222222222222222222ĵ}" 

iso8859_2:

"˙Ř˙ŕJFIF˙ŰC   2!!2222222222" 

编辑2:按照this Q&A我不能发布的链接,或参阅网页。


即使这个问题是关于源解码,这也将是巨大的,如果你能对替代解决方案(针对其他方法我试过即,见下文)点

1)我试着使用selenium,但以下内容阻止它获得源代码:“由于Firefox新功能的兼容性问题,部分禁用了辅助功能支持。” (这个问题似乎是需要登录到该网站的上附加)

硒代码:

driver = webdriver.Firefox() 
driver.get(url) 
htmlSource = driver.page_source 
driver.quit() 
soup = BeautifulSoup(htmlSource,'lxml') 

2)使用的urllib没有任何工作,并把它扔到引发HTTPError 302无限循环。我尝试使用cookiejar,但无济于事。

+0

你有没有试过'utf-16'? – stamaimer

+0

它返回:UnicodeDecodeError:'utf-16-le'编解码器无法解码位置0-1中的字节:非法UTF-16替代物 –

+1

JFIF表示JPEG文件交换格式。您正尝试将图像解码为文本。 –

回答

0

https://stackoverflow.com/a/41068125/7432972

resp.text应该在你的情况下返回Unicode文本。

请回复并告诉我这是否有效,因为我以前从未遇到过这个问题,可能是因为除了将响应反馈到bs4时,我总是使用request_response.text

编辑:

按@Ilja_Everilä,你有一个形象,而不是你要找的来源一个答复。我会检查你收到的那个请求的响应码(resp.status_code),它有可能不会是200,这意味着服务器返回一些其他的消息作为响应。如果是这种情况,将user-agent更改为其他内容可能会解决该问题,但似乎该网站至少不需要requests模块的请求。

或者,更有可能的是,它与您提到的需要登录的插件有关。可以通过.add_extension('/path/to/addon')selenium.webdriver.FirefoxProfile()添加插件。然而,任何配置的插件,我都忍不住。

+0

哦,我忘了在问题中提到我也尝试过.text。同样的结果: JFIF C2 !! 22 那么bs4呢?我打算在后面使用它 –

+0

@KostasMouratidis,对于'bs4',它不会将'request_response.text'看作有效的HTML(不出所料),所以你只需要传递request_response.content代替它,关于我所知道的。 –

+0

这似乎不是问题;响应代码是200,当我试图通过设置这些自定义标头(其适用于各种其他站点)来使用urllib(其余代码在原始问题中)时尝试避免请求: 'headers ['User-代理'] =“Mozilla/5.0(X11; Linux i686)AppleWebKit/537.17(KHTML,像Gecko)Chrome/24.0.1312.27 Safari/537.17”' –