对于为什么用模拟登陆不用我多说,有些网站只有你登陆进去之后才可以看到内容,而没登录的话爬下来的网页一般只有登陆界面的那一点,所以对于这种网站,就需要能够模拟登陆的状态去爬取页面信息
实现模拟登陆总体来说有两种大方向的方法,一种是利用自带的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)