1、Cookie简介
简而言之,Cookie是客户端登录一个网址后,保存完整的“会话信息”,或者只保存sessionID等信息的文件。
Cookie的目的是为了防止访问同一个网站的不同网页时,需要重复登录的问题。
正常登录一些网站时,Cookie的操作都是隐式、自动的,我们无需关系。但是在使用爬虫时,我们需要额外处理Cookie,以保持登录状态。
2、Cookiejar
python3中通过Cookielib库处理Cookie。
首先我们需要成功进行登录:
打开一个需要登录的网页
打开F12调试,点击表单的登录,找到登录的URL(找到POST请求即可)
观察表单元素的name属性,分析需要提交的字段
然后进可以使用代码实现:
def login(**keywords):
"""通过post表单传递信息,进行登录"""
# 使用uril.parse对字典信息进行编码,编码为服务端可识别的post形式
url = "http://bbs.chinaunix.net/member.php?mod=logging&action=login" \
"&loginsubmit=yes&loginhash=LFejL"
post_data = urllib.parse.urlencode(keywords).encode("utf-8")
# 结合url和post请求数据,构建Request对象
req = urllib.request.Request(url, post_data)
# 添加请求头
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36")
# 创建CookieJar对象
jar = http.cookiejar.CookieJar()
# 使用 HTTPCookieProcessor创建Cookie处理器,并以其为参数构建opener对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
# 将opener注册到全局
urllib.request.install_opener(opener)
return opener.open(req)
response = login(**{'username': '用户名', 'password': '密码'})
loginFile = open("E:/login.html", "wb")
loginFile.write(response.read())
loginFile.close()
htmlFile = urllib.request.urlretrieve("http://bbs.chinaunix.net", "E:/other.html")
urllib.request.urlcleanup()