Web Crawler

今天無聊就想說來改一下manpages-cpp的crawler
因為原本那個實在是太慢了...
爬過全部的頁面太概要2個多小時@@

原來的設計,cppman -r (rebuild index)這個選項本來就不是為user end設計的
而manpages-cpp裡本身就包含了已經cache好的index database。
所以我在rebuild index的功能上設計得很陽春,基本上只是個簡單的DFS。

不過今天我重新檢視了時間會如此慢的原因,發現原來問題是出在urllib.urlopen()
開一個頁面太概要0.7秒,不過這不是網路速度的問題。原因是在urllib預設的text buffer大小是0
所以每讀入資料就要重新分配記憶體,所以才會花到0.7秒。

我的解法是用multi-thread。不過有個很的問題是linux的thread limit
在我的電腦上最高只能開到323個thread,可是利用DFS隨便跑下去都幾百個thread
所以只好設了thread_max,如果要超過了就先join
這樣大概可以將時間縮短到13分鐘。2小時多到13分鐘這算是非常大的進步了。

不過我還是很不滿意這樣的解法,必竟thread limit在不同的機器上可能不一樣
所以我考慮了另一個叫作scrapy的library,這是一個web crawler的framework
可以很輕易的寫出一個客製化的crawler。

可是scrapy使用twisted這個library,為了一個rebulid index這個一般使用者不常用的功能而
有twisted這個這麼大的相依套件我覺的很不值得,所以我下一步就是來看scrapy的code想辨法來
優化我的crawler啦

留言

這個網誌中的熱門文章

決定了!!!

P.S. I Love You

Tips: PPTP client on Openwrt