在尝试获取某个人的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\".
字节。凉。我尝试使用提及here this Q&A .decode("format")
,iso
,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:根据documentation,我无法发布链接或参考网页。
即使这个问题是关于解码源的问题,如果你能指出替代解决方案(即我试过的其他方法,见下文),也会很棒。
1)我尝试使用selenium,但以下内容阻止它获取源:"由于新Firefox功能的兼容性问题,部分禁用了辅助功能支持。" (问题似乎是登录网站所需的附加组件)
Selenium代码:
driver = webdriver.Firefox()
driver.get(url)
htmlSource = driver.page_source
driver.quit()
soup = BeautifulSoup(htmlSource,'lxml')
2)使用urllib也没有工作,并且它抛出了一个HTTPError 302无限循环。我尝试使用cookiejar但无济于事。
答案 0 :(得分:0)
根据https://stackoverflow.com/a/41068125/7432972:
resp.text
应该在您的情况下返回Unicode文本。
请回复并告诉我这是否有效,因为我之前从未遇到过这个问题,可能是因为我总是使用request_response.text
,除非将回复反馈到bs4
编辑:
根据@Ilja_Everilä,您获得了一个图像作为响应,而不是您正在寻找的来源。我会检查您为该请求收到的响应代码(resp.status_code
),它有可能不会是200,这意味着服务器会返回一些其他消息作为响应。如果是这种情况,将user-agent
更改为其他内容可能会解决问题,尽管看起来有问题的网站至少不需要来自requests
模块的请求。
或者,更有可能的是,它与您提到的登录所需的插件有关。可以通过selenium.webdriver.FirefoxProfile()
向.add_extension('/path/to/addon')
添加插件。但是,对于插件的任何配置,我都无法帮助。