保存与读取cookie
接着爬取上次提过的网站。当前页面需要登录才能获取信息,编写爬虫自动登录,自定义opener对象添加可以保存cookie的HTTPCookieHandler处理器来发送请求,将cookie保存成cookie.txt文件,再读取cookie并向服务器发送请求获取目标网页信息。目标url为http://www.tuili.com/bbs/bbsShowDetail.asp?act=search&fid=260772&aid=&bid=29
登录请求url为http://www.tuili.com/bbs/bbslogincheck.asp,编码为GB2312。
运行代码
from urllib.request import Request, build_opener, HTTPCookieProcessor, urlopen
from fake_useragent import UserAgent
from http.cookiejar import MozillaCookieJar
def save_cookie():
# 登录网页地址
url = 'http://www.tuili.com/bbs/bbslogincheck.asp'
# 创建UserAgent实例
ua = UserAgent()
# 封装请求头信息
data = b'userid=%CF%C4%C8%D5%B1%F9%BA%EC%B2%E8&userpwd=Icedtea112'
headers = {'user-agent': ua.chrome}
# 创建Request对象
req = Request(url, data=data, headers=headers)
# 创建一个控制器用来辅助保存cookie
cookie_jar = MozillaCookieJar()
# 创建一个可以保存Cookie的控制器对象
handler = HTTPCookieProcessor(cookie_jar)
# 构建发送请求的对象
opener = build_opener(handler)
# 登录
resp = opener.open(req)
# 保存cookie到cookie.txt文件
cookie_jar.save('cookie.txt', ignore_discard=True, ignore_expires=True)
def use_cookie():
# 登录成功后获取目标网页html源代码
index_url = 'http://www.tuili.com/bbs/bbsnewdoc.asp'
headers = {'user-agent': UserAgent().chrome}
index_req = Request(index_url, headers=headers)
# 创建一个可以读取cookie为文件的对象
cookie_jar = MozillaCookieJar()
# 读取cookie文件
cookie_jar.load('cookie.txt', ignore_discard=True, ignore_expires=True)
# 创建一个控制器用来辅助读取cookie
handler = HTTPCookieProcessor(cookie_jar)
# 创建一个可以读取cookie的opener
opener = build_opener(handler)
# 发送请求,获取信息
index_resp = opener.open(index_req)
print(index_resp.read().decode('gb2312'))
if __name__ == '__main__':
save_cookie()
use_cookie()
运行结果(和手动登录查看的信息比对)