轩痕的竹林

Happy coding

python处理url

mechanize加载firefox3的cookies.sqlite文件

轩痕 posted @ Dec 15, 2010 06:13:15 PM in 蜘蛛 with tags mechanize , 1436 阅读

刚刚搞成功,尝试了好久,谁让mechanize这个东西的文档实在糟糕呢。。

mechanize的文档说它不支持ff3的cookies.sqlite文件,其实它是支持了的,这种情况确实让人郁闷。

我说说我的步骤。

首先看代码吧:

import mechanize

#根据自己的路径情况找到这个文件
db_path = '/home/xuanhen/.mozilla/firefox/lq6mrvtv.default/cookies.sqlite'  

#这个成员函数其实是有问题的,需要自己修改下,见后文
cookiejar = mechanize.Firefox3CookieJar(db_path) 

br = mechanize.Browser()
# 设置是否遵守爬虫协议,这里是不遵守,否则这个站不让爬
br.set_handle_robots(False)

#装载cookiejar,它会自动对后面访问的网站应用合适的cookie
br.set_cookiejar(cookiejar) 

url = "http://www.quora.com/"
response = br.open(url)  
s = response.read()

#html文件不好判断是否登录成功,就写成文本,然后通过浏览器打开来判断
f = open('./xx.html','w') 
f.write(s)
f.close()

注意:

1. mechanize.Firefox3CookieJar() 这个函数在加载cookie文件的时候会报编码错误,打开/usr/local/lib/python2.6/dist-packages/mechanize-0.2.4-py2.6.egg/mechanize/_firefox3cookiejar.py 文件(你的可不一定在这个位置),在第63行插入

self._conn.text_factory=lambda x: unicode(x, "utf-8", "ignore")

结果如下:

 59     def connect(self):
 60         import sqlite3  # not available in Python 2.4 stdlib
 61         self._conn = sqlite3.connect(self.filename)
 62         self._conn.isolation_level = "DEFERRED"
 63         self._conn.text_factory=lambda x: unicode(x, "utf-8", "ignore")
 64         self._create_table_if_necessary()

 

2. 如果这个函数没有报编码错误,而是key错误之类的,我不知道如何解决,我也遇到了,我猜测是由于有的cookie格式有问题,所以我就删除了cookies.sqlite文件,然后重新启动火狐,访问你要模拟登录的网站,让火狐把cookie给记录到它的sqlite数据库里面就可以了。

 

这篇文章如果没有标示转载,那版权就是偶滴,如果您想引用,请注明出自http://xuanhen.is-programmer.com

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter