我正在使用python请求库来发出http请求。对于此网站:https://www.epi.org/resources/budget/我无法读取HTML响应,因为它不是人类可读的,看起来它受cloudfare ddos保护。这是我下面的简单代码。
import requests
headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9,pt;q=0.8',
'cache-control': 'max-age=0',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
'upgrade-insecure-requests': '1'}
s = requests.Session()
a = s.get('https://www.epi.org/resources/budget/',headers=headers)
print (a.text)
响应HTML如下所示:https://justpaste.it/6ie73
答案 0 :(得分:0)
获取不可读内容的原因是Accept-Encoding
。与浏览器不同,如果Python得到gzip
响应,我们必须自己解压缩。此外,br
需要这样做,但要使用不同的模块brotl
。因此,您应该设置'Accept-Encoding': 'default'
。顺便说一句,如果您需要完整的内容,则必须进行渲染。