Python 爬虫实现Cookie 模拟登陆

本文详细介绍了如何使用Python的urllib2和cookielib库进行Cookie的获取、保存、读取及模拟登录豆瓣的过程。从创建CookieJar对象到构建opener,再到模拟登录,全面解析了Cookie在爬虫中的应用。

一、获取Cookie 并打印出来。

 #声明一个CookieJar对象实例来保存cookie
 cookie = cookielib.CookieJar()
 #利用urllib2库的HTTPCookieProcess对象来创建cookie处理器
 handler = urllib2.HTTPCookieProcessor(cookie)
 #通过hanlder来创建opener
 openr = urllib2.build_opener(handler)
 #此处的open 方法同 urllib2的urliopen方法,也可以传入 request
 response = openr.open("http://www.baidu.com")
 for item in cookie:
     print 'Name =' + item.name
     print 'Value =' + item.value

二、实现将cookie 保存到本地文件中

#设置保存cookie的文件,同级目录下的cookie.txt
filename = 'cookie.txt'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)
#创建一个请求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")
#保存cookie到文件
cookie.save(filename,ignore_discard=True,ignore_expires=True)

三、实现 从本地文件中读取cookie 并访问

#创建MozillaCookieJar实例对象
cookie = cookielib.MozillaCookieJar()
#从文件中读取cookie内容到变量
cookie.load('cookie.txt',ignore_expires=True,ignore_discard=True)
#创建请求的request
req = urllib2.Request('http://www.baidu.com')
#利用urllib2的build_opener方法创建一个opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(req)
print response.read()

四、实现 利用 cookie 模拟登陆 豆瓣

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0'
}
filename = 'cookie.text'
cookie = cookielib.MozillaCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#构建一个post数据
postdata = urllib.urlencode({
    'form_email':'XXXXXXXX',
    'form_password':'XXXXXXXXX'
})
loginUrl = 'https://www.douban.com/accounts/login'
req = urllib2.Request(url=loginUrl,headers=headers)
result = opener.open(req,postdata)
cookie.save(filename,ignore_discard=True, ignore_expires=True)
#直接带上cookie 访问首页
secondUrl = 'https://www.douban.com/'
request = urllib2.Request(url=secondUrl,headers=headers)
result = opener.open(request)
html = result.read()
selector = etree.HTML(html)
links = selector.xpath('//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]')
#返回账号的名字
print links[0].text

第一次写博客 !哈哈哈 以前都是写一下云笔记。有错的欢迎指出 谢谢。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值