CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。
-
1.CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
-
2.FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
-
3.MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。
-
4.LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。
其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCookieJar()。
注意:这边要写method=GET
,前面好半天不知道为什么有错,网页是get
pycharm默认也是就没有管,后面发现网页可能会识别出来我是一个爬虫,加上了method=get
就解决了
from urllib import request
from urllib import parse
from http.cookiejar import CookieJar
# 1.登录
# 1.1 创建一个cookie对象
cookiejar = CookieJar()
# 1.2 使用cookiejar创建一个http,cookiejar对象
handler = request.HTTPCookieProcessor(cookiejar)
# 1.3 使用上一步创建的handler创建一个opener
opener = request.build_opener(handler)
# 1.4 使用opener发送登录的请求
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36"
}
data ={
"email": "15831222968",
"_rtk": "970506slm"
}
login_url = "http://www.renren.com/SysHome.do"
req = request.Request(login_url, data=parse.urlencode(data).encode("utf-8"), headers=headers, method="GET")
opener.open(req)
# 2.访问个人主页
jiuyue_url = "http://www.renren.com/880151247/profile"
req = request.Request(jiuyue_url, headers=headers)
resp = opener.open(req)
with open("renren.txt", "w", encoding="utf-8") as fp:
fp.write(resp.read().decode("utf-8"))