改脚本模拟了用浏览器登录知乎
首先浏览器再申请打开网页(访问服务器时)会向服务器发送get post请求,主要是以报文的形式传输,首先看看浏览器的工作过程
1 在打开知乎时浏览器发送到报文是
2 在登陆时
填写好信息后发送的是_xsrf,password,remember_me,email所以只要用脚本带为发送这些即可
脚本部分:
在python用urllib包里的模块来提供一系列用于操作url的功能,这次主要用到request和parse模块
1 其中发送的一个参数_xsrf是首次打开知乎发送给浏览器的,所以首先要截取这个参数
用urllib.request的urlopen(url,data)方法(opener.open()一样)发送get,返回http响应的对象,可以用read()读出来最好加上decode(‘utf-8’)以免出错
2 读取出来html之后要在这么多的字符串中寻找_xsrf,可以用正则表达式
python中和正则表达式相关的包在re中,其中的findall(‘表达式’,str)就可以在str中找到与之匹配的字符串re.findall('name\=\"_xsrf\"\s+value\=\"(\w*)\"',data)并会返回
小括号中的内容
3 新建一个opener用来添加header用来伪装浏览器和处理cookie(在包 http.cookiejar中)
有了cookie就能实现自动登录,接下来如果继续访问,直接采用opener.open()就可以用保存的cookie打开
4 post的data数据(字典可以)要通过parse.urlencode()转化为bytes格式才能传输,记得加encode(‘utf-8’)不然报错
最后就登录成功了