python模拟登陆网页主要使用到urllib、urllib2、cookielib及BeautifulSoup等基本模块,当然进阶阶段我们还可以使用像requests等更高级一点的模块。其中BeautifulSoup模块在匹配html方面,可以很好的代替re,使用起来更方便,对于不会使用正则的人来说是福音。

本文使用python2.7

原理

模拟登陆前,我们需要先知道csdn是如何登陆的。我们通过google chrome浏览器先来分析下:
1.chrome浏览器用F12或ctrl+shift+I启动开发者工具,并访问csdn登陆页面,在开发者工具中对”Preserver log”选项打勾,表示跳转时不清楚之前的访问记录

2.输入用户名密码后,网页进行跳转,此时我们查看访问记录中Method为POST的链接的headers,可以看到

Request header:

Cache-Control:no-cache
Cache-Control:no-store
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html;charset=UTF-8
Date:Fri, 05 Aug 2016 03:51:56 GMT
Expires:Thu, 01 Jan 1970 00:00:00 GMT
Keep-Alive:timeout=20
Pragma:no-cache
Server:openresty
Set-Cookie:UD=%E4%BB%8A%E5%A4%A9%E4%B8%8D%E8%B5%B0%EF%BC%8C%E6%98%8E%E5%A4%A9%E5%8D%B3%E4%BD%BF%E8%B7%91%E4%B9%9F%E4%B8%8D%E4%B8%80%E5%AE%9A%E8%B7%9F%E5%BE%97%E4%B8%8A%EF%BC%81; Domain=.csdn.net; Path=/
Set-Cookie:UserName=yanggd1987; Domain=.csdn.net; Path=/
Set-Cookie:UserInfo=RjXwn4OfICh68ZVTzEjJxlcez5O%2B8RMsVvAiTV6uo4n4q1orcuBFZz29qx%2BUZ7JPFQQivvFGwFaC97NpT%2FKhtcZ2U%2B%2BzivoNtu5nTyg717xzimpeHcoutwnMg%2F5S8ZlARzA8H48TOftvUJUB0mxylQ%3D%3D; Domain=.csdn.net; Path=/
Set-Cookie:UserNick=man8er; Domain=.csdn.net; Path=/
Set-Cookie:AU=A3E; Domain=.csdn.net; Path=/
Set-Cookie:CASTGC=TGT-63516-e4e600adR5WiJAFintPeHqNCpGRvO9w7nHBYtY5XUCc2BPCCcG-passport.csdn.net; Path=/; Secure
Set-Cookie:UN=yanggd1987; Domain=.csdn.net; Expires=Sat, 05-Aug-2017 03:51:55 GMT; Path=/
Set-Cookie:UE="yanggd1987@163.com"; Version=1; Domain=.csdn.net; Max-Age=31536000; Expires=Sat, 05-Aug-2017 03:51:55 GMT; Path=/
Set-Cookie:BT=1470369115868; Domain=.csdn.net; Expires=Sat, 05-Aug-2017 03:51:55 GMT; Path=/
Set-Cookie:access-token=0bd99cf6-c5bf-4683-89b8-9d8678bebff9; Domain=.csdn.net; Path=/
Transfer-Encoding:chunked
Vary:Accept-Encoding

有以上可以看出登陆过程中有cookie

POST提交的数据:

username:XXXXXXXXX
password:XXXXXXXXX
lt:LT-52961-eMo02Bz4tlj3wQz4QMuO173GCIdsqE
execution:e15s1
_eventId:submit

其中username和password表示我们登陆的账户和密码,那lt、execution表示什么呢?不要急,我们看看登陆页面网站的源代码:

<form id="fm1" action="/account/login?from=http%3A%2F%2Fmy.csdn.net%2Fmy%2Fmycsdn" method="post"><input id="password" name="password" tabindex="2" placeholder="输入密码" class="pass-word" type="password" value="" autocomplete="off"><div class="row forget-password"><span class="col-xs-6 col-sm-6 col-md-6 col-lg-6"><input type="checkbox" name="rememberMe" id="rememberMe" value="true" class="auto-login" tabindex="4"><label for="rememberMe">下次自动登录</label></span><span class="col-xs-6 col-sm-6 col-md-6 col-lg-6 forget tracking-ad" data-mod="popu_26"><a href="/account/fpwd?action=forgotpassword&amp;service=http%3A%2F%2Fmy.csdn.net%2Fmy%2Fmycsdn" tabindex="5" target="_blank">忘记密码</a></span></div><!-- 该参数可以理解成每个需要登录的用户都有一个流水号。只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。 --><input type="hidden" name="lt" value="LT-53452-VLvC2gjfxdj4jheoUJQRkIXgoDZfc3"><input type="hidden" name="execution" value="e16s1"> <input id="username" name="username" tabindex="1" placeholder="输入用户名/邮箱/手机号" value="用户名" class="user-name" type="text"><input type="hidden" name="_eventId" value="submit"> <input class="logging" accesskey="l" value="登 录" tabindex="6" type="button">
</form>

上面注释的内容就是说明参数lt和execution的,就是在登陆过程中webflow会动态分配一个流水号LT-53452-VLvC2gjfxdj4jheoUJQRkIXgoDZfc3,我们只用获取到这个流水号才能够进行登陆。

从上面通过chrome分析得到,登陆csdn必须有cookie并且获取到webflow分配的流水号;;并且访问时必须有user-agent,否则客户端会被屏蔽。

实现

1.由于我们的系统是centos6.5,默认使用python2.6,因此我们需要先安装python2.7并安装相关第三方模块
(1)yum安装

rpm -Uvh https://centos6.iuscommunity.org/ius-release.rpm
yum -y install python27 python27-devel python27-pip python27-setuptools#安装相关第三方模块
pip2.7 install beautifulsoup4
pip2.7 install 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 --prefix=/usr/local/python2.7
make && make install
#环境变量
vim /etc/profile
export PATH=/usr/local/python2.7/bin:$PATH
source /etc/profile
#安装setuptools
wget https://pypi.python.org/packages/46/db/baa571da945ff731f3739a119574e89b12add9b05c03842103bd641d0990/setuptools-25.1.3.tar.gz#md5=0dcb9990901cb6e9631db195d4e775a7
tar -zxvf setuptools-25.1.3.tar.gz
cd setuptools-25.1.3
python2.7 setup.py install
#安装pip
wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz#md5=87083c0b9867963b29f7aba3613e8f4a
tar -zxvf pip-8.1.2.tar.gz
cd pip-8.1.2
python2.7 setup.py install
#安装相关第三方模块
pip2.7 install beautifulsoup4
pip2.7 install lxml

注意: 通过编译安装的pip2.7 安装lxml会报错,因此还是建议使用yum安装的pip2.7

2.代码实现

vim csdn_login.py
#!/usr/bin/env python2.7
#-*- coding: utf-8 -*-import urllib
import urllib2
import cookielib
from bs4 import BeautifulSoupfilename = 'cookie_csdn.txt'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)loginurl = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"#登陆前准备:获取lt和exection
response = opener.open(loginurl)
soup = BeautifulSoup(response.read(), "lxml")
for input in  soup.form.find_all("input"):if input.get("name") == "lt":lt = input.get("value")if input.get("name") == "execution":execution = input.get("value")
#post信息
values = {"username":"用户名","password":"密码","lt":lt,"execution":execution,"_eventId":"submit"}
postdata = urllib.urlencode(values)opener.addheaders = [("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36")]#模拟登录,保存cookie到cookie.txt中
result = opener.open(loginurl, postdata)cookie.save(ignore_discard=True, ignore_expires=True)
#登陆后我们随意跳转到博客
url = "http://blog.csdn.net/XXXXXXXXX"
result = opener.open(url)

3.运行

python2.7 csdn_login.py

至此,当我们登陆后,可以随意指定一个页面进行登陆了。

总结

1.urllib和urllib2配合使用,因为urllib可以将post数据进行encode,而urllib2不可以

2.由于使用cookie、header等,用到了urllib2的基础库opener实现访问等操作,当然也可以使用urllib2.Request(url,data,header)等其他访问方式。

3.每个网站登录方式可能不一样,我们需要根据实际情况分析。

4.模拟登陆是我们通过实战学习python的一种方法,而不是用它来恶意攻击。

python爬虫之模拟登陆csdn相关推荐

  1. python项目实战:模拟登陆CSDN

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个利用Python模拟登陆CSDN的案例,虽然看起来很鸡肋,有时候确会有大用处,在这里就当做是一个案例练 ...

  2. Python爬虫之模拟登陆

    女神找我倾诉,实验室实验选不上,刚出来就被秒了,让我帮她选实验,我想我这万年单身的手速估计还是抢不过我这些师兄们,干脆写一个脚本吧,这样以后女神就找我选实验了,废话少说,切入主题,看这篇教程首先得保证 ...

  3. python爬虫(一):模拟登陆微博

    最近花了不少时间来学python爬虫,觉得还是有很多问题的,比如说requests.get获得Pixiv的网页源代码,一直获取不到,不过我猜测大概是headers的问题,准备之后处理. 废话少说我们先 ...

  4. 模拟登陆CSDN -- Python爬虫练习之正则表达式和cookie

    这周学习的主题是正则表达式和cookie,原本是计划每天晚上11点下班到家,练上一两个钟就把这部分过了,结果这周各种事情和不再状态,所以没整完,直至今天才把相关问题过掉.其实这部分也挺不错的,也并没有 ...

  5. Python爬虫——Cookie模拟登录

    文章目录 Python爬虫--Cookie模拟登录 1.Cookie模拟登录 2.Handler处理器 Python爬虫--Cookie模拟登录 1.Cookie模拟登录 现在很多网站需要用户成功登录 ...

  6. 湖南工业大学教务系统爬虫(模拟登陆篇)

    湖南工业大学教务系统爬虫(模拟登陆篇) 之前写了一个教务系统的爬虫程序,可以根据用户要求爬取任何一部分的数据,也可以模拟提交数据,可能这也是部分工大计算机学生比较感兴趣的,所以今天就在这分享一下整个的 ...

  7. 模拟登陆CSDN——就是这么简单

    工具介绍 本篇文章主要是讲解如何模拟登陆CSDN,使用的工具是HttpClient+Jsoup 其中HttpClient主要是负责发送请求,而Jsoup主要是解析HTML 你可能对HttpClient ...

  8. Python网络爬虫之模拟登陆

    为什么要模拟登陆 Python网络爬虫应用十分广泛,但是有些网页需要用户登陆后才能获取到信息,所以我们的爬虫需要模拟用户的登陆行为,在登陆以后保存登陆信息,以便浏览该页面下的其他页面. 保存用户信息 ...

  9. python爬虫怎么登录_Python爬虫基础-模拟登陆

    为什么我们要让爬虫模拟登陆呢?有些内容只有登陆才能进行爬取,如知乎,不登录的主页只能看到注册和登陆 : 你想爬取自己的个人信息 有什么方法呢?cookie 在互联网发展的早期,由于大家的服务器都不是太 ...

  10. python 模拟登陆智联_Python+scrapy爬虫之模拟登陆

    一.126,163邮箱模拟登陆 # -*- coding:utf-8 -*-import timefrom selenium import webdriverdef login126_or_163em ...

最新文章

  1. Linux系统目录结构说明
  2. Go 支持Protocol Buffers的配置
  3. java 待在原页面 代码_现在java后台,只要修改一点点代码,前段页面就报500,必须重新登录才行?...
  4. DayDayUp:博主,在此,祝愿大家(十五种编程语言输出),2019年春节快乐!猪年诸事大吉!学要有所成,劳要有所获!
  5. #串口通信超时处理_【学院推荐】划重点!LabVIEW中串口参数需注意的几点
  6. SpringBoot整合WebSocket时调用service和mapper的方法
  7. ALGO-117_蓝桥杯_算法训练_友好数
  8. 前端学习(3163):react-hello-react之组件化编码
  9. 总结出来的一些ASP.NET程序性能优化的注意事项[不断补充]
  10. Linux 服务器拷贝远程文件 SCP
  11. Android view变形,Android SurfaceView预览变形完美解决方法
  12. spring cloud Eureka 之配置信息
  13. 斯坦福22岁辍学少年的独角兽野心:准备颠覆硅基无人车激光雷达
  14. 薄荷Android团队成员Blog
  15. Java面向对象--instanceof关键字
  16. Python基础(十): 函数的基本概念
  17. Java大数类自我需要掌握的
  18. 饿了么微信小程序抓取
  19. [高频电子线路]-避免从第一章开始懵逼
  20. Mac大小写切换,中英文切换

热门文章

  1. cad2012打开后闪退_win10系统安装cad2012一直闪退的解决方法
  2. EVC下如何直接访问寄存器?
  3. PMP考试必备基础知识
  4. 因用了NeatUpload大文件上传控件而导致Nonfile portion 4194304 bytes错误的解决方法...
  5. ajax跨域例子,ajax跨域例子
  6. 麟龙指标通达信指标公式源码_麟龙指标通达信指标公式源码
  7. 软件实习项目4——校园一卡通管理系统(实验准备与设计)
  8. linux拓实n87驱动下载,拓实N87无线网卡驱动
  9. 《R语言初学者指南》pdf
  10. c语言起点到目的地方法数,最短路径动态规划问题及C语言实现探讨