使用urllib库请求网站时,需要用开启cookie的方法。
这边的cookie开启需要使用http.cookiejar,通过cookieJar()类构建一个cookieJar()对象,用来保存cookie的值
一、这边利用登录人人网举例说明import urllib.parse
import urllib.request
from http import cookiejar
cookie = cookiejar.CookieJar()
#通过cookieJar()类构建一个cookieJar()对象,用来保存cookie的值
cookie_handler = urllib.request.HTTPCookieProcesor(cookie)
#通过HTTPCookieProcessor()处理器类构建一个处理器对象,用来处理cookie
#参数就是构建的CookieJar()对象
open = urllib.request.build_opener(cookie_handler)
#构建一个自定义的opener
url = 'http://www.renren.com/'
data = {'email':'xxx@xxx.com','password':'xxxxxx'}
data_process = urllib.parse.urlencode(data).encode('utf-8')
#通过URL encode()编码转换
request = urllib.request.Request(url,data=data)
response = opener.open(request)
二、也可以利用MozillaCookieJar()方法把cookies信息存储在本地文件中,以方便下一次使用。
这边例子保存百度得到cookie信息import urllib.request,urllib.parse
from http.cookiejar import MozillaCookieJar
cookie = MozillaCookieJar('cookie.txt')
#通过MozillaCookieJar()类构建一个cookieJar()对象,用来保存cookie的值
cookie_handler = urllib.request.HTTPCookieProcessor(cookie)
#通过HTTPCookieProcessor()处理器类构建一个处理器对象,用来处理cookie
#参数就是构建的MozillaCookieJar()对象
open = urllib.request.build_opener(cookie_handler)
#构建一个自定义的opener
response = opener.open('https://www.baidu.com/')
cookie.save(ignore_discard=True, ignore_expires=True)
# for cookie_n in cookie:
# print(cookie_n.name+'+'+cookie_n.value)
#查看cookie内容
ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入
三、从文件中获取Cookie信息from http.cookiejar import MozillaCookieJar
import urllib.request
cookie = MozillaCookieJar()
#创建MozillaCookieJar实例对象
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
#从文件中读取cookie内容到变量
cookie_handler = urllib.request.HTTPCookieProcessor(cookie)
#通过HTTPCookieProcessor()处理器类构建一个处理器对象,用来处理cookie
open = urllib.request.build_opener(cookie_handler)
#利用urllib的build_opener方法创建一个opener
req = urllib.request.Request("http://www.baidu.com")
response = opener.open(req)
设想,如果我们的 cookie.txt 文件中保存的是某个人登录百度的cookie,那么我们提取出这个cookie文件内容,就可以用以上方法模拟这个人的账号登录百度。
注意:这边的cookie是局部使用,如果要全局使用就需要用install_opener,局部需要cookie的时候用opener.open ,不需要的时候直接用urllib.request.urlopen 。
用requests 也差不多,需要的时候用 session ,不需要的时候直接用 requests.get 。