python3.x爬虫 模拟登陆 (以人人网为例)

最近在爬虫时遇到很多问题,先一个一个的解决,今天说一下模拟登陆。

在爬取网页信息的时候,有些网站可能会很友好,能够让你轻松的爬到你想要的数据,但有的网站就没那么nice了。其中就有一种,在没有登陆之前,你看不到任何关于网站的内容,比如 “某乎 ”和人人,如果你没有账号,直接登陆网站首页,蹦出来的是登陆界面,只有登陆进去之后,才能看到真正的首页的内容。

那么该如何抓取一些需要登录后才能看到的内容呢?所以就在网上找了一下,大概的方法就是利用cookie,很多帖子都是以人人网为例来演示的(为啥受伤的总是人人网)。终于找到了一个可以运行的通的例子,免登录人人网

这里贴一下博主的主要代码部分,代码的详细解读请参考:urllib和requests模拟登陆

import json
from urllib import request, parse
 
# 保存cookie
from http import cookiejar
# 通过对象保存cookie
cookie_object = cookiejar.CookieJar()
# handler 对应着一个操作
handler = request.HTTPCookieProcessor(cookie_object)
# opener 遇到有cookie的response的时候,
# 调用handler内部的一个函数, 存储到cookie object
opener = request.build_opener(handler)
 
 
 
# url
url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2018722024835' 
# form
form = {
    'email': 'your name',  #用户名
    'password': '455148ff24ecadda4e241f2797b5ab51ce9725c7df8cf0204638c0e60b1e557c', #这是加密后的密码
    'rkey': 'f2758794667a236f9fe7db56c6b10a7d',
   
}
# post
form_bytes = parse.urlencode(form).encode('utf-8')
 

response = opener.open(url, form_bytes)
 
html_bytes = response.read()
#html_bytes = post(url, form=form)
# 打印结果
#print(html_bytes)
# 通过json获取一个字典类型
res_dict = json.loads(html_bytes.decode('utf-8'))
 
home_url = res_dict['homeUrl']
 
# 访问页面
response = opener.open(home_url)
html_bytes = response.read()
print(html_bytes.decode('utf-8'))
 
#根据自己登陆的信息,修改 url和form中的email项 password,rkey,f这几项就可不用登录账号直接进入网页爬取信息,登录后刷新网页找到login里的headers信息
 

在这个代码里面,需要我们自己去修改的就是form中的信息,将其中的各种数据,比如用户名,密码等替换成你自己的登陆信息。到这里,自然而然的会有很多的问题浮现出来:

1.这个程序是如何实现的,cookiejar,以及其中的opener起到的作用是什么?

2.在该代码中出现了一个链接:

url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2018722024835' 

你可能会很奇怪,人人网的登陆界面网址是 http://www.renren.com,那么上面那个网址是怎么得到的?

3.程序中的form信息作者是从何处得到的呢?

首先对于第一个问题,我也还认真看过,想再进一步了解的同学可以看一下python关于这几部分的源文档,另外提醒一点,现在很多教程里面都是Python2.x版本的,而在python3.x中urllib和urllib2已经合并成了一个urllib,所以那些用到urllib2的函数要做一点适当的修改,具体如何修改,可以自行百度。

关于第二个和第三个问题,让我很是头疼,尤其是第三个问题,如果不解决,自己根本用不了。我们先来看原博主给出的解答:“#根据自己登陆的信息,修改 url和form中的email项 password,rkey,f这几项就可不用登录账号直接进入网页爬取信息,登录后刷新网页找到login里的headers信息”,

看完之后,是不是感觉一头雾水,不知所云?很多博客都有这毛病:说话说一半。如果你觉得这还不够说明问题的话,看下面这解释:“url = '个人登录的url,    登录前按F12审查元素,   第二行的第二个单词组 打上勾 ,保持审查元素可以保持正常保留 ,  登录之后  点第三行   XHR  然后有一个 login?...    点开,第一行 General里面的Request URL    就是这个路由”

你们有人看的懂上面那句解释说的啥么?反正我是看不懂。看似说了一大堆,但没有一句话让人听明白的,但是当你真正实现的时候,你会发现,嘿,原来这货竟然说的是对的。下面我来一句一句的翻译一下上面那句话的意思。

“登录前按F12审查元素,”:首先你要打开人人网的网址,进到这个界面,然后按下F12进入开发者模式

“第二行的第二个单词组 打上勾 ,保持审查元素可以保持正常保留” :进入开发者模式,点network,勾选Preserve log(还真TM是第二行第二个)


“登录之后  点第三行   XHR  然后有一个 login?... ”:完成上面两步之后,就在登陆界面输入你的用户名和密码,点击登录按钮,然后会出现下面的界面,点MeThod,然后在所有的post总发现第三个,点开

点开之后,你想要的,都在这里,是不是很惊喜

猜你喜欢

转载自blog.csdn.net/explorer9607/article/details/83118349
今日推荐