工作中需要爬一台内网中服务器的网页,自动获取返回的图片信息。
但是执行代码没有获得希望的信息。
尝试在浏览器中输入网址,结果跳以下界面
原来是要验证才能连接成功。
点击‘取消’,观察网络信息
果然是这样。请求头中没有包含Authorization,所以验证没通过。
然后再尝试一下,输入用户名和口令,网页可以正常显示。
观察网络信息,此时请求头中出现了Authorization。
网上查了一下,一堆攻略,基本都是一个意思。
追加代码如下:
def get_authorization():
return base64.b64encode(user_name + ":" + user_passwd);
headers = {
'Authorization': 'Basic {}'.format(get_authorization()),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
再次执行代码,终于可以顺利爬到网页信息了。
关于HTTP请求头Authorization,可以参见 https://blog.csdn.net/qq_42514453/article/details/85385925
注意:Base64编码是一种“防君子不防小人”的编码方式。广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有“=”,生成的编码都是ascii字符。