今天小编就为大家分享一篇大蟒爬虫之模拟登陆csdn的实例代码,具有很好的参考价值希望对大家有所帮助。一起跟随小编过来看看吧
大蟒模拟登陆网页主要使用到urllib、urllib2、cookielib及美丽的声音等基本模块,当然进阶阶段我们还可以使用像要求等更高级一点的模块。其中美丽的声音模块在匹配超文本标记语言方面,可以很好的代替re,使用起来更方便,对于不会使用正则的人来说是福音。
本文使用python2.7
原理
模拟登陆前,我们需要先知道csdn是如何登陆的。我们通过谷歌浏览器浏览器先来分析下:
1 .铬合金浏览器用F12或ctrl shift I启动开发者工具,并访问csdn登陆页面,在开发者工具中对”Preserver log”选项打勾,表示跳转时不清楚之前的访问记录。
2.输入用户名密码后,网页进行跳转,此时我们查看访问记录中方法为邮政的链接的标题,可以看到
Request header:
缓存控制:无缓存
缓存控制:无存储
连接:保持活动状态
内容编码:gzip
内容类型:文本/html;字符集=UTF-8
日期:Fri,格林威治时间2016年8月5日03时51分56秒
到期时间:1970年一月一日星期四00:00:00 GMT
保持活动状态:超时=20
杂注:无缓存
服务器:openresty
设置饼干:UD=今天不走,明天即使跑也不一定跟得上!域=.csdn.net路径=/
set-Cookie:UserName=yang d 1987;域=.csdn.net路径=/
set-Cookie:UserInfo=rjxwn 4 of ich 68 zvtzejjjxlcez 5 o+8 rmsvvaitv 6 uo 4n 4 q 1或cub fzz 29 qx+uz 7 jpfqqivvfgwfac 97 NPT/kht cz 2u++ zivontu 5n tyg 717 xmpehcoutwnmg/5s 8 zlarza 8h 48 toftwujub 0 mxylq==;域=.csdn.net路径=/
set-Cookie:用户nick=man 8 er域=.csdn.net路径=/
set-Cookie:AU=A3E;域=.csdn.net路径=/
set-Cookie:CASTGC=TGT-63516-e4e 600 ADR 5 wijafintpehqncpgrvo 9 w 7 NH byt 5 Xu CCC 2 bpcccg-passport。csdn。网;path=/;安全的
set-Cookie:UN=yang d 1987;Domain=.csdn.netexpires=2017年8月5日星期六格林威治时间03:51:55;路径=/
set-Cookie:UE=' yangd 1987 @ 163。com’;版本=1;domain=. csdn . net max-Age=31536000;过期=2017年年8月5日星期六格林威治时间03:51:55;路径=/
set-Cookie:BT=1470369115868;Domain=.csdn.netexpires=2017年8月5日星期六格林威治时间03:51:55;路径=/
set-Cookie:access-token=0bd 99 cf 6-c5bf-4683-89 b8-9d 8678 bebf 9;域=.csdn.net路径=/
传输编码:分块
变化:接受-编码
有以上可以看出登陆过程中有甜饼干
POST提交的数据:
用户名:XXXXXXXXX
密码:XXXXXXXXX
SQE gcid
执行:e15s1
_eventId:提交
其中用户名和密码表示我们登陆的账户和密码,那lt,执行表示什么呢?不要急,我们看看登陆页面网站的源代码:
表单id=' fm1 ' action='/帐户/登录?" from=http://my。csdn。net/my/mycsdn "方法="post "
输入id=' password ' name=' password ' tabindex=' 2 ' placeholder='输入密码class=' pass-word ' type=' password ' value=' ' autocomplete=' off '
div class='行忘记密码'
span=col-xs-6 col-sm-6 col-MD-6 col-LG-6
输入类型=' checkbox ' name=' memory me ' id=' memory me ' value=' true ' class=' auto-log in ' tabindex=' 4 '
='记住我'的标签下次自动登录/标签
/span
这是一个很好的例子忘记跟踪-ad' data-mod='popu_26 '
a href='/account/fpwd?action=forgotpasswordampservice=http://my。csdn。net/my/mycsdn ' rel='外部无follow ' tabindex=' 5 ' target=' _ blank '忘记密码/a
/span
/div
!-该参数可以理解成每个需要登录的用户都有一个流水号。只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。 -
输入类型=' hidden ' name=' LT ' value=' LT-53452-vlvc 2 gjfxdj 4 jheoujqrkixgodzfc 3 '
输入类型='隐藏'名称='执行'值='e16s1 '
输入id='用户名name='用户名tabindex='1 '占位符='输入用户名/邮箱/手机号值='用户名class=' user-name ' type=' text ' input type=' hidden ' name=' _ eventId ' value=' submit '
输入class=' logging '访问键=' l '值='登录tabindex='6' type='button '
/表单
上面注释的内容就是说明参数它和执行的,就是在登陆过程中webflow会动态分配一个流水号LT-53452-vlvc 2g jfxdj 4 jheoujqrkixgodzfc 3,我们只用获取到这个流水号才能够进行登陆。
从上面通过铬分析得到,登陆csdn必须有甜饼干并且获取到webflow分配的流水号;并且访问时必须有用户代理,否则客户端会被屏蔽。
实现
1.由于我们的系统是centos6.5,默认使用python2.6,因此我们需要先安装python2.7并安装相关第三方模块
(1)百胜安装
rpm-Uvh https://centos6.iuscommunity.org/ius-release.rpm
好吃的安装python 27 python 27-devel python 27-pip python 27-设置工具
#安装相关第三方模块
pip2.7安装beautifulsoup4
pip2.7安装lxml
(2)编译安装
安装python.2.7
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
tar -zxvf Python-2.7.12.tgz
cd Python-2.7.12。/configure-前缀=/usr/local/python 2.7
制作制作安装
#环境变量
vim /etc/profile
导出路径=/usr/local/python 2.7/bin:$ PATH
来源/etc/配置文件
#安装setuptools
wget https://pypi。python。org/packages/46/db/baa 571 da 945 ff 731 f 3739 a 119574 e 89 b 12 add 9 b 05 c 03842103 BD 641d 0990/设置工具-25。1 .3 .焦油。gz # MD5=0 dcb 9990901 CB 6e 9631 db 195d 4 e 75 a 7
塔尔-zxvf setuptools-25.1.3.tar.gz
激光唱片安装工具-25.1.3
python2.7 setup.py安装
#安装点
wget https://pypi。python。org/packages/E7/A8/7556133689 add 8d 1 a 54 c 0 b 14 aeff 0 ACB 03 c 64707 ce 100 ECD 53934 da 1 aa 13/pip-8。1 .2 .焦油。gz # MD5=87083 c 0 b 9867963 b 29 f 7 ABA 3613 e 8 f4a
塔尔-zxvf pip-8.1.2.tar.gz
cd pip-8.1.2
python2.7 setup.py安装
#安装相关第三方模块
pip2.7安装beautifulsoup4
pip2.7安装lxml
注意:通过编译安装的pip2.7安装lxml会报错,因此还是建议使用妙的安装的pip2.7
2.代码实现
vim csdn_login.py
#!/usr/bin/env python2.7
#-*-编码:utf-8 -*-
导入urllib
导入urllib2
导入库奇利布
从bs4导入美丽的声音
filename='cookie_csdn.txt '
#声明一个MozillaCookieJar对象实例来保存饼干,之后写入文件
cookie=cookielib .MozillaCookieJar(文件名)
#利用urllib2库的HTTPCookieProcessor对象来创建甜饼干处理器
handler=urllib2 .HTTPCookieProcessor(cookie)
#通过处理者来构建开启工具
opener=urllib2.build_opener(处理程序)
loginurl='https://passport.csdn.net/account/login?from=http://my。csdn。' net/my/mycsdn '
#登陆前准备:获取它和执行
response=opener.open(loginurl)
汤=美汤(回应。read(),' lxml ')
对于soup.form.find_all('输入')中的输入:
if input.get('name')=='lt ':
lt=input.get('值)
如果输入。get(' name ')==' execution ':
execution=input.get('值)
#帖子信息
值={
用户名":"用户名,
密码":"密码,
lt':lt,
'执行:执行,
_eventId ':'提交'
}
postdata=urllib.urlencode(值)
开场。add headers=[(' User-Agent ',' Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/51。0 .2704 .63 Safari/537.36 ')]
#模拟登录,保存甜饼干到cookie.txt中
result=opener.open(loginurl,postdata)
饼干。保存(ignore _ discard=True,ignore_expires=True)
#登陆后我们随意跳转到博客
URL=' http://博客。csdn。' net/XXXXXXXXX '
result=opener.open(url)
3.运行
python2.7 csdn_login.py
至此,当我们登陆后,可以随意指定一个页面进行登陆了。
总结
1.urllib和urllib2配合使用,因为urllib可以将邮政数据进行编码,而urllib2不可以
2.由于使用饼干,标题等,用到了urllib2的基础库开启工具实现访问等操作,当然也可以使用urllib2 .请求(网址,数据、标题)等其他访问方式。
3.每个网站登录方式可能不一样,我们需要根据实际情况分析。
4.模拟登陆是我们通过实战学习python的一种方法,而不是用它来恶意攻击。
以上这篇大蟒爬虫之模拟登陆csdn的实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。