python爬虫cookie方面(1)

文章目录

本次用的网站是人人网

cookie简单介绍

"""
- cookie & session
	- 由于http协议的无记忆性,人们为了弥补这个缺憾,所采用的一个补充协议
	- cookie是发给用户(即http浏览器)的一段信息,session是保存在服务器上的对应的另一半信息,用来记录用户信息
- cookie和session的区别
	- 存放位置不同
	- cookie不安全
	- session会保存服务器上一定时间,会过期
	- 单个cookie保存数据不超过4K,很多浏览器限制一个站点最多保存20个
- session的存放位置
	- 存在服务器端
	- 一般情况,session是放在内存中或者数据库中
"""
from urllib import request

if __name__ == '__main__':
    url = 'https://i.csdn.net/#/uc/profile'

    rsq = request.urlopen(url)

    html = rsq.read().decode("utf-8") # utf-8可以不填因为默认是utf-8

    with open("rsp.html", "w") as f:
        f.write(html)
        

上边是一个失败的案例 如果不放入cookie进不去

下边是一个成功的案例 放入了cookie 可以进去 然后返回

from urllib import request

if __name__ == '__main__':
    url = "http://www.renren.com/970585682/profile"

    headers = {
        "Cookie": "anonymid=jv08b501-5m0yvp; depovince=HEN; _r01_=1; JSESSIONID=abcH02I0s3Fey9p7WFHPw; ick_login=79eb8010-7e8d-41a6-9e9e-ffd3442f9bbc; ick=a7cd4710-8896-42da-aba2-d60a7124f3b4; jebecookies=ba1aa5d4-a5c7-4103-ba46-cfed329bb990|||||; _de=83839D6246BE064853537152FAFEB306; p=762545a281c56bd1086f44e6809825782; first_login_flag=1; ln_uact=15225771396; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; t=6ea2155869f60958db550938cb0d61582; societyguester=6ea2155869f60958db550938cb0d61582; id=970585682; xnsid=9e7fa20f; ver=7.0; loginfrom=null; jebe_key=248c3c72-ae33-4570-8ce2-49aa9ecf4095%7C638486ed18fa6c27507eb7af2f54b9e1%7C1556413966996%7C1%7C1556413967099; wp_fold=0; XNESSESSIONID=f303f79d26e5; WebOnLineNotice_970585682=1"
        }

    req = request.Request(url, headers=headers)

    rsp = request.urlopen(req)

    html = rsp.read().decode()

    with open("rsp.html", "w", encoding='utf-8') as f:
        f.write(html)

整体和第一个失败案例没什么区别只是加入了cookie

"""
- 使用cookie登录
	- 直接把cookie复制下来,然后手动放入请求头 
	- http模块包含一些关于cookie的模块,通过他们我们可以自动使用cookie
		- CookieJar
			- 管理存储cookie,向传出的http请求添加cookie
			- cookie存储在内存中,CookieJar实例回收后cookie将消失
		- FileCookieJar(filename, delayload=None, policy=None):
			- 使用文件管理cookie
			- filename是保存cookie的文件
		- MozillaCookieJar(filename, delayload=None, policy=None):
			- 创建mocilla浏览器cookie.txt兼容的FileCookieJar实例
		- LwpCookieJar(filename, delayload=None, policy=None):
			- 创建libwww-perl标准兼容的Set-Cookie3格式的FileCookieJar实例
		- 他们的关系是:CookieJar-->FileCookieJar-->MozillaCookieJar-->LwpCookieJar
"""

from urllib import request, parse, error
from http import cookiejar

cookie = cookiejar.CookieJar()
# 创建cookie jar的实例

cookie_handler = request.HTTPCookieProcessor(cookie)
# 生成 cookie的管理器

http_handler = request.HTTPHandler()
# 创建http请求管理器

https_handler = request.HTTPSHandler()
#生成https管理器

opener = request.build_opener(http_handler, https_handler, cookie_handler)
#创建请求管理器

def login():
    '''
    负责初次登录
    需要输入用户名密码,用来获取cookie凭证
    :return:
    '''

    # 此url需要从登录form的action属性中提取
    url = "http://www.renren.com/PLogin.do"

    # 此键值需要从登录form的两个对应的input中提取name属性

    data = {
        "email": '你的账号',
        "password": '你的密码'
    }

    # 把数据进行编码
    data = parse.urlencode(data)

    # 创建一个请求对象
    req = request.Request(url, data=data.encode())

    # 使用opener发起请求
    rsp = opener.open(req)

def gerHomePage():
    url = 'http://www.renren.com/970585682/profile'
    # 如果已经执行了login函数,则opener自动已经包含相应的cookie值
    rsp = opener.open(url)

    html = rsp.read().decode()

    with open("rsp.html", "w", encoding='utf-8') as f:
        f.write(html)
if __name__ == '__main__':
    login()
    gerHomePage()

猜你喜欢

转载自blog.csdn.net/weixin_43854835/article/details/89639497