今天干活遇到一个事。有一些网站的一些操作非得要求你登陆才能做,比如新浪微博,你要随便看看吧,不行,非得让你登陆了才能看,再比如一些用户操作,像更改自己的资料啦,个人的隐私啦巴拉巴拉的。想抓取这样的url的话,就得一边携带cookie一边搞。
今天遇到的问题就是mediawiki的编辑文章这个操作,wiki默认是要求你登陆才能编辑。不过wiki是开源的,可以改源码设置成不用非得登陆也可以编辑。最开始为了快点看到效果,就是改的源码,记得是LocalSetting.php这个文件,里面有一堆键值对,是用户权限的设置。都是布尔,很好搞。
后来又研究了一下urllib2是怎么携带cookie的:
下面干这么一件事:去知乎登陆,完了进到个人中心的编辑资料页面。就这两步
#encoding:utf-8 import urllib import urllib2 import cookielib #用来搞cookie的 #第一步:登陆知乎 #拿到一个cookie实例,用来保留cookie,具体怎么保留这个不用操心,一切给http handler(这里就是HTTPCookieProcessor)处理 cookie = cookiellib.CookieJar() #整一个opener出来,实际上不这么整的话,就像最普通的urllib2.urlopen(url)这样,实际上也是用了一个默认的openrer,只不过今天在这里是明确指定了opener,因为要搞cookie么 #build_opener里面加了一个http handler用来处理所有http请求相关的东西,包括cookie的操作,这里为了搞cookie,所以用了这个cookieprocessor,里面放刚才的cookie实例 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) data = {"email":"xxx","password":"xxx"}
data=urllib.urlencode(data) request = urllib2.Request("http://www.zhihu.com/login", data) response = opener.open(request) #这个时候cookie已经被保存好了 print cookie #第二步:进入个人中心编辑页面 #注意上面cookie已经保存好了,而且注意是用这个cookie创建了httpcookieprocessor,又用这个httphandler创建了opener,所以这个opener就跟cookie关联上了,那么接下来进入个人中心就直接用这个opener就可以了 response2 = opener.open("http://www.zhihu.com/people/edit") #完事 谢谢
完事,洗香香去,完了俯卧撑,昨晚昨晚今天胸疼嗷嗷嗷嗷