最近在学习python,在利用cookies直接登陆网站,而不用通过账号,密码登陆这一问题上折腾了很久,这里把我在这一过程中遇到的问题及解决方案记录并分享一下
首先,是得到保存有用户登录信息的cookies,这里我使用的是firefox浏览器
安装Firebug插件,可以很方便的查看网站的所有cookies,并且一键导出。
这里我以csdn网站为例,先通过账号,密码的方式登陆csdn,然后打开Firebug,可以看到下图所示的cookies的列表,在红色箭头所指处,可以导出以下所有的cookies。
在导出cookies之前,需要先解决一些问题
在上图中红色箭头指向的“会话”这一属性:指的是在浏览器被关闭之后这些cookies信息会被丢弃。
通过Firebug虽然能够把这些“会话”信息导出,但是在后面python中导入cookies文件时会出错,而且有些“会话”cookies里面保存有与登陆有关的信息,所以在这里将”会话“改变为固定的时间格式。
在”会话“处右键,选择编辑,如下图所示
将红色箭头指向的钩点掉,然后才能将“会话”改为时间格式,这里修改的时间随意,只要还没有过期就可以,将所有的“会话”改为时间格式后,将所有的cookies导出,保存为“cookies_csdn.txt”,在txt文档的头部,加入以下代码,让Python的cookielib中的 MozillaCookieJar 能够识别该cookies文件
# Netscape HTTP Cookie File
接下来在python中,利用cookies直接登陆网页,扒取网页信息
使用的IDE是PYCharm
新建一个Python File,命名为cookies_use_csdn,代码如下
#-*- coding:utf-8 -*-
import cookielib
import urllib2
import bs4
import re
from bs4 import BeautifulSoup
cookie=cookielib.MozillaCookieJar()#声明一个CookieJar对象实例来保存cookie
cookie.load('cookies_csddn.txt',ignore_discard=False,ignore_expires=False)#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'#用header保存模拟的请求身份
headers={'User-Agent':user_agent,'Referer':'http://my.csdn.net/'}
url="http://my.csdn.net/"
rq_body = ''
req=urllib2.Request(url,rq_body,headers)
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response=opener.open(req)
print response.read()
上图中访问的URL为:'http://my.csdn.net/',如果未登录,看到的界面源码如下,会有登录和注册的元素。
当我们利用cookies,直接到达用户登录状态,再来扒取网页时,就可以看到用户的身份信息了
如果能够找网页元素中找到上述内容,则证明通过cookies登录成功了!!!
以上便是分享的内容,有什么问题请指正.