Python3作採集

出於某些目的,須要在網上爬一些數據。考慮到Python有各類各樣的庫,之前想試試Pycharm這個IDE,就決定用它了。首先翻完《深刻Python3》這本書,瞭解了它的語法之類的。下面就如下載http://www.meinv68.com/爲例子開始幹活了:html

  1. Http協議的實現。那本書裏有介紹一個叫httplib2的庫,看起來挺好。就用這個庫把網頁內容抓下來先。
  2. Html解析。以前有用過一些解析xml的庫,可是想着html代碼可能不會太嚴禁,就找到了一個傳說中對html容錯度很高的庫:BeautifulSoup。Python3得用這個庫的第四版,導入時也是要導「bs4」庫。解析挺簡單,我用的基本仍是xml那一套。
  3. 數據保存。呃,沒啥說的,就是用內建方法open()打開一個文件,會返回一個文件對象,而後調用它的各類方法就能夠了。

採集的有點慢。須要採集的數據有三十多萬條。可是一個頁面只有十條數據,並且每三四秒左右才能從服務器抓到一個頁面。剛開始想着用多線程之類的加速,但想着抓一次就行了,並且有人鄙視說,抓太快對服務器負擔太大,就讓它跑了個通宵。只抓了十萬條數據,並且還有漏的。正則表達式

 

而後就找到另一個網站,繼續抓。這個時候蛋疼了,那網頁裏的內容大部分都是js之類生成的。第一反應就是看看有沒人用Python實現一個js的解釋器。結果發現這個工具量太大,不少庫都必須依靠瀏覽器來解析,過重量級。先放一放,就先看看這個js裏有些啥,會不會直接有須要的數據。瀏覽器

之前沒有網頁開發的經驗,只是問過同窗什麼js,asp語言是幹嗎用的。可是Firefox好久以前就裝了FireBug這個插件,就拿出來隨便點點。很容易看到了加載的js,可是看了半天沒發現有想要的東西。而後繼續隨便點點,發現加載的不僅一個腳本,最後在控制檯裏,發現Get了一個aspx文件,裏面就有想要的數據。服務器

 

 

下面繼續是Python的事了:多線程

  1. 瞄了下那個url裏,有關於日期的參數。首先很純潔的想到我須要一個能處理日期的類。嗯,我也找到了,datetime。這貨能很方便的處理關於 「時間」的功能,好比一個時間的前一天,前一秒是何時,計算兩個時間相差多少等等,而徹底不用考慮相似潤年哇,加了幾小時後就成了另一天之類的問題。也能很方便的把日期用字符串按指定的格式打印出來。
  2. 抓到這裏面的文件後,須要進行分析。就簡單的用正則表達式了。用到的庫是re。呃,用法也很簡單,能夠先用編譯一個正則表達式,而後能夠查看一個字符串能不能被這個正則表達式匹配,返回匹配部分等等。

由於這個腳本很小,比起抓整個網頁來講,效率好太多了,一秒鐘左右抓一個頁面,並且一個頁面大概有170條數據。跑了二十分鐘左右就抓完了。函數

 

後:工具

之前用C++這樣的靜態類型語言,一個表達式的值,一個函數的返回值只能是一種類型。可是Python則不一樣,好比open()會根據你打開模式返回不一樣的類型的對象。雖說C++的parser作起來很難,可是隻要作出來,就能很容器肯定一個變量的類型(模板中的除外,因此C++11放棄Concept的時候仍是略讓人蛋疼的),而後IDE就能進行很好的自動補全建議。可是動態類型語言這方面則略爲蛋疼了,對IDE要求高了一點。好處則是很方便靈活,寫函數裏也不怎麼糾結參數的實際類型,全特麼是模板參數……好在PyCharm能根據一個函數的docstring判斷參數的類型。網站

還有就是Python裏對機器的控制弱了點。由於數據量有點大,因此不得不關心了下list的實現。它相似C++ stl裏的vector,可是又沒有提供設置容量的方法。如今就用collection.deque將就了一下。url

相關文章
相關標籤/搜索