python网络数据采集-处理登录和cookie

来源:互联网 发布:淘宝客服技巧用语 编辑:程序博客网 时间:2024/05/22 17:36

第一部分:基础概念

      到次为止,我们介绍过大部分表单都允许你想网站提交信息,或者让你在提交表单后立即看到想要的页面信息,那么,这些表单和登录表单(当你浏览网站时让你保持“已登录”状态)有什么不同?

      大多数新式的网站都用cookie跟踪用户是否已登录的状态信息。一旦网站验证了你的登录权证,它就会将它们保存在你的浏览器的cookie中,里面通常包含一些服务器生成的令牌、登录有效时限和状态跟踪信息。网站会把这个cookie当做信息验证的证据,在你浏览网站的每个页面时出示给服务器。在20世纪90年代中期广泛使用cookie之前,保证用户安全验证并跟踪用户是网站上的一大问题。

     虽然cookie为网络开发者解决了大问题,但同时却为网络爬虫带来了重大问题。你可以一整天只提交一次登录表单,但是如果你没有一直关注表单传回给你的那个cookie,那么一段时间以后再次访问新页面时,你的登录状态就会丢失,需要重新登录。

第二部分:实战

 2.1 登录测试:

        在http://pythonscraping.com/pages/cookies/login.html有一个简单的登录表单(用户名可以是任意值,但是密码必须是“password”) 。这个表单在http://pythonscraping.com/pages/cookies/welcome.php处理,里面包含一个简介页面http://pythonscraping.com/pages/cookies/profile.php。

      如果你在登录会签想要进入欢迎界面或简介界面,会看到一个错误信息和访问前请先登录的指令。在界面页面中,网站会检测浏览器的cookie,看它有没有页面已经登录的设置信息:

用Requests库跟踪cookie同样很简单:

import requestsparams={'username':'Peter','password':'password'}r=requests.post("http://pythonscraping.com/pages/cookies/welcome.php",params)print("Cookie is set to:")print(r.cookies.get_dict())print("....a......")print("Going to profile page ...")r=requests.get("http://pythonscraping.com/pages/cookies/profile.php",cookies=r.cookies)print(r.text)
     这里我们向欢迎页面发送了一个登录参数,它的作用就像登录表单的处理器,然后我从请求结果中获取cookie,打印登录状态的验证结果,然后在通过cookies参数把cookie发送到简介页面,程序执行结果如下:


与浏览器执行结果一致。

2.2   复杂网站处理方式

     对于简单的网站,一般上面的方法就可以使用了,但是如果你面对的是一个比较复杂的网站,它经常暗自调整cookie,或者如果你从一开始就完全不想要用cookie,该怎么处理呢?Requests库的session函数可以完美地解决这些问题:

import requestssession=requests.Session()params={'username':'Peter','password':'password'}s=session.post('http://pythonscraping.com/pages/cookies/welcome.php',params)print("Cookie is set to:")print(s.cookies.get_dict())print("..........")print("Going to porfile page...")s=session.get("http://pythonscraping.com/pages/cookies/profile.php")print(s.text)
执行结果如下图,与上面的结果一致:

     在这个例子中,session(会话)对象(调用requests.session()获取)会持续跟踪会话信息,像cookie、header,甚至包括运行HTTP协议的信息,比如HTTPAdapter(为HTTP和HTTPS的链接会话提供统一的接口)。

第三部分:小结

     Requests库是一个非常给力的库,程序员完全不用费脑子,也不用写代码,可能只逊色与Selenium.虽然写网络爬虫的时候,你可能想放手让Requests库替自己做事情,但是持续关注cookie的状态,掌握它们可以控制的范围是非常重要的,这样可以避免痛苦地调试和追寻网站异常行为,节省很多时间。

原创粉丝点击