在客户端向服务器提交http请求的时候,两种最经常使用的方法是GET和POST。按照规定,get请求只应用于获取数据,所以通常都是用requests.get()
。相对于GET请求,POST请求则用于提交数据。对登录表单的处理,每次登录能够直接处理登录表单或者选择在第一次登录后,保存cookies等信息,下次可直接登录。如下内容主要介绍直接处理表单的,获取目标页面的url的方法。php
参考书籍:Python网络爬虫从入门到实践中http://www.santostang.com./wp-login.php;
用户名:test;密码:a12345;
参考网页:http://www.javashuo.com/article/p-kqmizeim-bz.htmlhtml
登录表单分为两步:python
研究网站登录表单,构建POST请求的参数字典;浏览器
提交POST请求;服务器
构建参数字典主要是4个部分,都是 键值对的形式,经过查询网页,拣选对应的键和值;cookie
如上图,F12 点选用户名框,name的属性值为"log",以此做为key;value 为用户实际名。so 'log'='a12345';网络
如上图,F12 点选密码框,name的属性值为"pwd",以此做为key;value 为用户实际名。so 'pwd'='test';session
如上图,F12 点选 记住密码框,name的属性值为"rememberme",value的属性值为"forever"。so 'rememberme'='forever';wordpress
如上图,F12 点选 记住登录框,input type的属性值为"hidden"的有两条。第一条,name属性值为"redirect_to",value的属性值为"http://www.santostang.com/wp-admin/",so 'redirect_to'='http://www.santostang.com/wp-admin/';第二条,name属性值为"testcookie",value的属性值为"1" so 'testcookie'='1';post
综上所述:创建参数字典,以下:
post_data={ 'log':'a12345', 'pwd':'test', 'rememberme':'forever', 'redirect_to':'http://www.santostang.com/wp-admin/', 'testcookie':'1' };
提交POST请求,就能够登录网站了。首先须要导入requests库,并建立一个session对象。用户浏览某个网站时,从进入网站到关闭浏览器所通过的这个过程,session对象会存储特定用户会话所须要的属性和配置信息。 session 对保存和操做cookies很是重要。
#encoding:utf-8; import requests; post_link='http://www.santostang.com./wp-login.php';#登录页面 url agent='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'; host='www.santostang.com'; oringin='http://www.santostang.com'; cookied='wordpress_test_cookie=WP+Cookie+check'; headers={'User-Agent':agent,'Host':host,'Origin':oringin,'Referer':post_link,'Cookie':cookied};#提交者 post_data={ 'log':'test', 'pwd':'a12345', 'wp-submit':'登陆', 'redirect_to':'http://www.santostang.com/wp-admin/', 'testcookie':'1' }; login_page=requests.post(post_link,data=post_data,headers=headers,allow_redirects=False); profile_page=login_page.headers['location']; print (login_page.status_code);## 回复302 print (login_page.headers['location']);## 回复http://www.santostang.com/wp-admin/profile.php
提交post的过程很简单,即先创建各个参数,而后使用post
方法,参数是post_url,data是postdata,headers是headers,allow_redirects。headers中,User-Agent、Host、Origin(比host多了个http?)、Referer(就是登录页面的url)、cookies。
login_page.status_code
。返回值200,表请求成功;303,表重定向;400,表请求错误;401,表未受权;403,表禁止访问;404,表文件未找到,500,表服务器错误。表单登录页面:http://www.santostang.com/wp-login.php
表单中的重定向网址:http://www.santostang.com/wp-admin/
登录成功目标网址:http://www.santostang.com/wp-admin/profile.php
得到Headers的参数的捷径, 在登陆页,不输入用户及用户名,点击登陆框,查看F12 中 request headers,post_data的参数,如上,headers中的cookied也必须有。login_page=requests.post(post_link,data=post_data,headers=headers,allow_redirects=False)
中的allow_redirects=False
,必须有,否则
login_page.status_code
的返回值为200,其实去了post_data中的redirect_to 重定向网页中,而不是跳转到目标网页;添加该属性,返回的是302,完成了post的第一次请求,其respons header中location属性值即为profile的url,能够此url向服务器发送第二次请求。便可以此url采集数据。
可是我不懂,资料中对headers的参数及post参数的设定不明确,漏掉了cookie及allow_redirects 致使刚开始一直进入重定向网址,而获取不到目标网页的网址。仍是官方文档比较靠谱。http://www.python-requests.org/en/master/user/quickstart/#redirection-and-history
参考网址:https://blog.csdn.net/zhu_free/article/details/50563756
经过session,可记录网页cookies中用户信息,以免每次登录的时候都要输用户名及密码。只要将第一次接触的网页cookies 用session 存储,或者将屡次网页的cookies从session中提取,便可。
(1)一直搞不懂,网页network headers中response headers和requests headers 是干蛤的。
http://www.santostang.com/wp-login.php
post第一次请求 http://www.santostang.com/wp-admin/profile.php
登录后http://www.santostang.com/wp-admin/profile.php
每一个url,都会有requests和respons,其实每次请求都会用到这两个。requests 能够理解是向服务器发送请求须要的,而respon是服务器接收到请求后,反馈回来的。
由上可知,进入到profile url 前,想象增长一个中间页面,如图三,虽然浏览器中已是pofile的地址,但其general 的request url 仍是login ,其respons能够理解为post login url第一次请求后服务器返回的内容(location、cookies 已找到),request能够理解以location、cookies第二次向服务器发送请求的要求(因此Referer是login,而且在咱们post请求的headers 参数值中),且增长一块From data,就是post的参数字典。可是进入location url ,如图四,其general url 变成 profile 、request method 为get、status code 为200 。
一个重定向网址,就是为了记住登陆前的网页,这样,不会每次登录后都回到 首页。
(2)cookies
其实cookies就是每一个登录的钥匙。
(3)其实仍是不是很懂这种网页的东西,记得很绕,不是理论,就是本身的催眠本身的理解。但愿不要误导到人。慎入,哈哈。