pyhon3.4 requests模块模拟post登陆csdn

来源:互联网 发布:sql注入电子书 编辑:程序博客网 时间:2024/04/30 03:12

pyhon3.4 requests模块的使用

  之前一直在研究爬虫的使用,网上的有关python爬虫的资料虽然虽然比较多,但是也很杂,有些程序使用的urllib2,有些使用http.client,比较杂,说的比较模糊,研究了一个星期才明白怎么post登陆抓取登陆信息,以及爬虫主要注意的一些方面

  • POST的抓取
      我使用的是Fiddler进行抓包分析,可以获得申请的requests,返回的response里面的数据进行分析,判断是否成功登陆,网上说的r.status 等等这些都实际上不能作为是否成功登陆的的依据。
  • cookie和headers的包装
      有些网站会进行cookies和headers的判断所以进行requests时候必须包含已经设计的headers和cookies
      cookies是保证登陆数据的凭证,使用requests.Session()来自动保存cookie,你说需要做的就是先get一遍网页来获得cookie从而保证post数据的时候,cookie是原来网页的cookie而不是空
      headers是必须自己进行设计的,可以使用网上的模板,也可以使用Fiddler截取的headers,都没有问题
      当然有些网站还会检查headers里面Referer来判断是不是从该网站的某一个页面跳转到这个页面的,来屏蔽盗链什么的,so你需要的就是把Referer补充就OK
  • 抓取网页的关键字段
      可以使用正则表达式re模块来进行抓取,也可以使用bs4的BeautifulSoup模块来进行抓取都差不多,我就不谈了,看官方中文说明,更加具体仔细

  • 几种网页post需要模块的比较

    • urllib:笨重而且缓慢,基于高层语言编辑的效率单线程下低下,测试i7配置,post登陆接近28s,我是服了,配置起来也异常复杂,而且本身不支持http一些高级功能,最不推荐使用
    • http.client:基于底层,效率比较靠和requests速度差不多,配置也比较麻烦,不过貌似有Session()应该可以简化配置,不过我没试过
    • requests:用法简单,配置方便,具题看官网

  • Word is Cheap,下面上王道。
#requests.pyimport requestsimport reurl="https://passport.csdn.net"s=requests.Session()headers={    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36',     'Accept-Encoding': 'gzip, deflate',      'Connection': 'keep-alive',      'Accept': '*/*'}s.headers=headersdoc=s.get(url, verify=False).texts1=re.findall(r'name="lt" value="(.*?)"',doc)[0]t=re.findall(r'name="execution" value="(.*?)"',doc)[0]value = {        'username': 'acsunqi',         'password': '************',         'lt':s1,         'execution':t,         '_eventId':'submit',    }  print(value)r=s.post(url,value)print(r.text)mysd=s.get('http://my.csdn.net/my/mycsdn').textprint(mysd)  with open(r'C:\Users\sunqi\Desktop\webdata.txt','w') as f:    f.write(mysd)    print(mysd)data=r.text  

成功r.text会返回一个login.js的文档

<script src="/content/loginbox/loginapi.js" ></script><script>    function redirect_back(){        var redirect = "http://www.csdn.net/";        var data = {"userId":55698829,"isLocked":false,"mobile":"马赛克=。=","userName":"acsunqi","email":"","password":"此处马赛克马赛克马赛克","registerIP":"182.48.104.153","isDeleted":false,"isActived":true,"role":0,"registerTime":"Aug 3, 2015 1:29:17 AM","userType":0,"lastLoginIP":"119.103.224.105","lastLoginTime":"Feb 6, 2016 2:17:00 AM","loginTimes":29,"user_status":0,"activeTime":"Aug 3, 2015 1:29:17 AM","passwordStrongLevel":2,"ucSyncStatus":true,"nickName":"acsunqi","avatar":"http://avatar.csdn.net/1/D/F/1_acsunqi.jpg"};        var userInfo = "8ClRT6oCiTXgNIcPJ97lMU+KK/SUT2KJjvcbryNkav4QTfDzxjb2kY06MJi3aIaAoo/7YFQ/wBXJCXppS/GrtmdKb8NR770lzdstcC4vWy8=";         data.userName = data.userName;        data.encryptUserInfo = userInfo;        csdn.login_param.call = function (){            location.href = redirect;        }        var _data = {};        _data.status = true;        _data.data = data;        var oauth = "";        if(oauth == "true"){            csdn.login_back(_data);         }else{            csdn.login_data = data;            csdn.login_end();        };    }</script>

随便我又get了一遍自己的个人主页,返回正常,登陆成功

0 0
原创粉丝点击