对于为什么用模拟登陆不用我多说,有些网站只有你登陆进去之后才可以看到内容,而没登录的话爬下来的网页一般只有登陆界面的那一点,所以对于这种网站,就需要能够模拟登陆的状态去爬取页面信息
实现模拟登陆总体来说有两种大方向的方法,一种是利用自带的urllib库,另外一种是使用requests库,下面来分别讲解一下这两种方法具体是如何实现的。
首先要明确具体的思路是什么,才能动手编码实现。
我们的目的是为了能够模拟登陆的状态去爬取网页内容,那么只要我们得到了服务器返回的登陆用户的cookie,就可以在之后的请求中将cookie加进去。
为了获得服务器返回的cookie,我们第一次需要模拟登陆过程,并保存返回的cookie,这时候就需要确定如下信息:
登陆界面的url是什么?请求包中的信息是什么?cookie应该如何获取和保存?
下面就是我们实现的具体步骤:
一、cookie的处理
cookie_object = cookiejar.CookieJar()
handler = request.HTTPCookieProcessor(cookie_object)
opener = request.build_opener(handler)
二、构造登陆请求信息data
即登陆所需要的用户名以及登陆密码等,这个登陆信息的构造取决于你要登陆的网站是什么,所以具体情况要具体分析
data={
'username':"your name"
'password':"your psword"
}
三、利用opener和登陆请求信息打开登陆链接,获得cookie(loginurl 取决于你的登陆链接)
req=urllib.request.Request(loginurl,data=data)
respon=opener.open(req)
四、利用带cookie的opener打开其他需要登陆才能操作的界面,爬取信息(myrequrl为你要爬取的网页)
res=opener.open(myrequrl)
具体的实例请参看我写的这篇文章:人人网模拟登陆
使用requests就比较简单了,几行代码就可以搞定
import requests
#登录人人网的url
url0 = "http://www.renren.com/PLogin.do"
#登录到个人主页的url
url1 = "http://www.renren.com"
data = {'email':"yourname",
'password':'yourpw'}
#进行登录,并保存cookie
req = requests.Session()
response = req.post(url0,data=data)
#可以直接访问个人主页了
zhuye = req.get(url1)
print(zhuye.text)
文章浏览阅读618次。2019独角兽企业重金招聘Python工程师标准>>> ..._mac trinitycore
文章浏览阅读3.6k次。《Windows驱动开发技术详解》一书中,介绍了一种“Windows驱动程序日志打印和查看的方法”,具体就是:在需要打印日志的地方,调用“KdPrint”函数,该函数类似标准C的printf(print file)函数。然后用“DebugView.exe”软件查看日志。一、引入事实上,微软也提供了一个日志打印和日志查看机制,它可以查看指定的驱动文件的日志,并..._windows驱动开发 日志
文章浏览阅读2.9k次,点赞6次,收藏2次。目录一.自我介绍二.编程目标三.学习编程的方法四.分配编程的时间五.最想进入的IT公司一.自我介绍大家好,这里是ONE_KICK,一名一名普通的大二学生,这是我的第一篇blog,现在还是一名编程小白,因为自己对于游戏的热爱决定开始学习基础的编程,来到CSDN,一方面是可以学习到很多的知识,另一方面是想要记录一下自己的学习历程。二.编程目标从零开始学习编程,打算先学习C语言,而后开始学习C++,近期的目标是在一年时间内掌握C++的用法。三.学习编程的方法打算稳扎稳打的学习C++,每天会有固定的时间
文章浏览阅读1.6w次。模拟键盘按键━━━━━━━━━━━━━━━━━━━━━━━━以前就想过如何模拟键盘按键向其他程序发送控制命令,但总是无功而返,这次也不例外。模拟按键的方法很多,如PostMessage(不能用SendMessage),SendInput,keybd_event。但最要命的是以上方法基本上都要窗口获取焦点时才有效。也就是想后台模拟键盘按键难度是很高的。当然有些特殊_vc模拟键盘输入
文章浏览阅读6.7k次,点赞8次,收藏3次。打开docker容器,启动redis镜像,报错:Error invoking remote method 'docker-start-container': Error: (HTTP code 500) server error - Ports are not available: listen tcp 0.0.0.0:2181: bind: An attempt was made to access a socket in a way forbidden by its access per._error invoking remote method 'docker-run-container': error: (http code 400)
文章浏览阅读64次。组合数 递推void get_C(){ for(int i=0;i<=2005;i++) { C[0][i]=C[i][i]=1; for(int j=1;j<i;j++) { C[j][i]=(C[j-1][i-1]+C[j][i-1])%MOD; ..._inv2 数论
文章浏览阅读636次。我一个一个查授权、筛选证实可商用。你知道吗?你平时在电脑轻轻一点就能用的字体,属于法律保护的美术作品!当我们习惯于在网上搜刮各种字体,以为可以随便用在自己的设计图、网页(比如H5广告)上时,可能一直无意间伤害着创作者、版权人。以下整合出可能是最全的免费可商用字体,下载方式见文末——都是我一个一个查授权、筛选证实可以用的啊。最后提醒一下..._点字灵动体字体免费商用吗
文章浏览阅读4.2k次,点赞6次,收藏11次。https://www.openssl.org/source/openssl-1.1.1l.tar.gzhttps://www.openssl.org/source/openssl-1.1.1l.tar.gzopenssl.spec文件内容Summary: OpenSSL 1.1.1l for CentOSName: opensslVersion: %{?version}%{!?version:1.1.1l}Release: 1%{?dist}Obsoletes: %{name} <=_libcrypto 1.1.1t
文章浏览阅读1.2k次,点赞6次,收藏12次。将MNIST手写数字数据集导入NumPy数组下载MNIST数据集(使用urllib.request.urlretrieve()函数)打开下载得到的.gz压缩文件(使用gzip.open()函数)并导入NumPy数组(使用np.frombuffer()函数)完整实例(能直接运行):可能遇到的问题:下载MNIST数据集(使用urllib.request.urlretrieve()函数)os.path.exists(path)可以判断是否存在以path为地址的文件。urllib.request.urlre_ubyte.gz用什么打开
文章浏览阅读1k次,点赞15次,收藏13次。对C语言数组的详细剖析,以及底层理解,相信你一定有所收获_数组的底层逻辑
文章浏览阅读950次。框架标签:< frameset> < frameset rows=”10%,*”> < frame src=”1.html” name=”top” /> < frameset cols=”30%,*”> < frame src=”2.html” name=”left_h|keycount| html
文章浏览阅读1.1k次,点赞2次,收藏7次。修改yum的下载源_虚拟机如何优化yum源