python处理url
我现在有一些这样的数据,用来生成url,以提供给爬虫进行爬取。
Venture Capital
Banking (excl. Investment Banking)
Washington, D.C.
Nightlife in Washington, DC
Amazon $175mm Investment in LivingSocial (December 2010)
Twitter's Future
Florian Leibert / Noirin Shirley Incident
这些数据最终要以 - 进行连接,来生成地址。
上代码:
#ipython 下执行 import re In [41]: path = re.sub("[?@ =#().&]", "-", "Banking (excl. Investment Banking)") In [42]: path Out[42]: 'Banking--excl--Investment-Banking-' In [43]: path1 = re.sub("-+","-",path) In [44]: path1 Out[44]: 'Banking-excl-Investment-Banking-' In [45]: path1.rstrip('-') Out[45]: 'Banking-excl-Investment-Banking'
如果有一些新发现的奇怪字符,在
re.sub("[?@ =#().&]", "-", "Banking (excl. Investment Banking)")
那一堆符号里面加上新符号就是了。
mechanize加载firefox3的cookies.sqlite文件
刚刚搞成功,尝试了好久,谁让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数据库里面就可以了。