python之处理需要登录信息的网站

当我们遇到了需要登录才能进去的网站时

首先,我们必须声明以一个CookieJar对象,接下来,就需要利用HTTPCookieProcessor来构建一个Handler,最后利用build_opener()方法构建opener,执行oper()函数即可

 1.以豆瓣举个例子

from http.cookiejar import CookieJar
from urllib.request import Request,build_opener,HTTPCookieProcessor

#http.cookie,主要作用是为urlib提供一个可以保存cookie信息的对象
#通过这个对象可以跟踪请求中的cookie信息
#1,创建一个cookie对象,
cookie_obj = CookieJar()

#2.
cookie_header=HTTPCookieProcessor(cookie_obj)

#3,
opener = build_opener(cookie_header)

#4,
res = opener.open('http://www.douban.com')

#5,打印cookie信息
for cookie in cookie_obj:
    print('key={},value={}'.format(cookie.name,cookie.value))

2.cookie实际也是以文本格式写入的,所以我们将信息写入文件

#把cookie信息写入文件
from http.cookiejar import CookieJar,LWPCookieJar
from urllib.request import Request,build_opener,HTTPCookieProcessor,urlopen
#保存cookie信息的文件名
file_name = 'cookie.txt'

cookie_obj = LWPCookieJar(filename=file_name)
cookie_header = HTTPCookieProcessor(cookie_obj)
opener = build_opener(cookie_header)
res = opener.open('http://www.douban.com')
#保存cookie信息到文本文件
#ignore_discard=true 即使cookie信息将要过期/废弃,也将其保存起来
#ignore_expires=true  即使cookie信息在文件中已存在,仍然对其覆盖写入
cookie_obj.save(ignore_discard=True,ignore_expires=True)

结果,在你创建的文件显示的结果如下

 3.读取cookie文件内容信息发请求

#读取文件中cookie信息发请求

from http.cookiejar import LWPCookieJar
from urllib.request import Request,build_opener,HTTPCookieProcessor

cookie = LWPCookieJar()
cookie.load('cookie.txt')
req = Request('https://www.douban.com')
#携带cookie信息发请求
opener = build_opener(HTTPCookieProcessor(cookie))
res = opener.open(req)
print(res.read().decode())

结果获取的是所取网页的源代码

4.实例  通过post请求登录到智游教务管理系统

from http.cookiejar import CookieJar,LWPCookieJar
from urllib.request import Request,HTTPCookieProcessor,build_opener,urlopen
from urllib.parse import urlencode

post_url = 'http://kaoshi.zhiyou900.com:8888/edustu/login/login.spr'
post_data = urlencode({
    'j_username':'13275975573',
    'j_password':'123456'
}).encode('utf-8')
file_name= 'zhiyou.txt'
cookie = LWPCookieJar(filename=file_name)
cookie_header = HTTPCookieProcessor(cookie)
opener = build_opener(cookie_header)
url = 'http://kaoshi.zhiyou900.com:8888/edustu/login/login.spr'
req = Request(url,data=post_data,headers={
'User-Agent':"Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1",
})
res = opener.open(req)
cookie.save(ignore_expires=True,ignore_discard=True)

cookie_find = LWPCookieJar()
cookie_find.load('zhiyou.txt',ignore_expires=True,ignore_discard=True)
res1 = Request('http://kaoshi.zhiyou900.com:8888/edustu/me/edu/index.spr')
opener2 = build_opener(HTTPCookieProcessor(cookie_find))
req1 = opener2.open(res1)
print(req1.read().decode())

第一个链接是登录界面的网址,需用post请求将数据放进去,然后登录成功后,获取教务管理系统的源代码

结果当然是教务管理系统的源代码

处理这样的网站基本就很需要合理的运用模块,函数,对象

猜你喜欢

转载自blog.csdn.net/DonQuixote_/article/details/81319704