python採集 Python3做採集

2021-10-11 00:07:55 字數 1543 閱讀 7216

http協議的實現。那本書裡有介紹乙個叫httplib2的庫,看起來挺好。就用這個庫把網頁內容抓下來先。

html解析。之前有用過一些解析xml的庫,但是想著html**可能不會太嚴禁,就找到了乙個傳說中對html容錯度很高的庫:beautifulsoup。python3得用這個庫的第四版,匯入時也是要導「bs4」庫。解析挺簡單,我用的基本還是xml那一套。

資料儲存。呃,沒啥說的,就是用內建方法open()開啟乙個檔案,會返回乙個檔案物件,然後呼叫它的各種方法就可以了。

採集的有點慢。需要採集的資料有三十多萬條。但是乙個頁面只有十條資料,而且每三四秒左右才能從伺服器抓到乙個頁面。剛開始想著用多執行緒之類的加速,但想著抓一次就好了,而且有人鄙視說,抓太快對伺服器負擔太大,就讓它跑了個通宵。只抓了十萬條資料,而且還有漏的。

然後就找到另外乙個**,繼續抓。這個時候蛋疼了,那網頁裡的內容大部分都是js之類生成的。第一反應就是看看有沒人用python實現乙個js的直譯器。結果發現這個工具量太大,很多庫都必須依靠瀏覽器來解析,太重量級。先放一放,就先看看這個js裡有些啥,會不會直接有需要的資料。

以前沒有網頁開發的經驗,只是問過同學什麼js,asp語言是幹嘛用的。但是firefox很久之前就裝了firebug這個外掛程式,就拿出來隨便點點。很容易看到了載入的js,但是看了半天沒發現有想要的東西。然後繼續隨便點點,發現載入的不只乙個指令碼,最後在控制台裡,發現get了乙個aspx檔案,裡面就有想要的資料。

下面繼續是python的事了:

瞄了下那個url裡,有關於日期的引數。首先很純潔的想到我需要乙個能處理日期的類。嗯,我也找到了,datetime。這貨能很方便的處理關於 「時間」的功能,比如乙個時間的前一天,前一秒是什麼時候,計算兩個時間相差多少等等,而完全不用考慮類似潤年哇,加了幾小時後就成了另外一天之類的問題。也能很方便的把日期用字串按指定的格式列印出來。

抓到這裡面的檔案後,需要進行分析。就簡單的用正規表示式了。用到的庫是re。呃,用法也很簡單,可以先用編譯乙個正規表示式,然後可以檢視乙個字串能不能被這個正規表示式匹配,返回匹配部分等等。

因為這個指令碼很小,比起抓整個網頁來說,效率好太多了,一秒鐘左右抓乙個頁面,而且乙個頁面大概有170條資料。跑了二十分鐘左右就抓完了。

後:以前用c++這樣的靜態型別語言,乙個表示式的值,乙個函式的返回值只能是一種型別。但是python則不同,比如open()會根據你開啟模式返回不同的型別的物件。雖然說c++的parser做起來很難,但是只要做出來,就能很容器確定乙個變數的型別(模板中的除外,所以c++11放棄concept的時候還是略讓人蛋疼的),然後ide就能進行很好的自動補全建議。但是動態型別語言這方面則略為蛋疼了,對ide要求高了一點。好處則是很方便靈活,寫函式裡也不怎麼糾結引數的實際型別,全特麼是模板引數……好在pycharm能根據乙個函式的docstring判斷引數的型別。

還有就是python裡對機器的控制弱了點。因為資料量有點大,所以不得不關心了下list的實現。它類似c++ stl裡的vector,但是又沒有提供設定容量的方法。現在就用collection.deque將就了一下。

python3 切片 python3 切片

取乙個list或tuple的部分元素是非常常見的操作。比如,乙個list如下 l michael sarah tracy bob jack 取前3個元素,應該怎麼做?笨辦法 l 0 l 1 l 2 michael sarah tracy 之所以是笨辦法是因為擴充套件一下,取前n個元素就沒轍了。取前n...

python3安裝 Python3的安裝

1.anaconda安裝 2.安裝包安裝 3.linux下的命令列安裝 centos red hat 1 sudo yum install y sudo yum update3 sudo yum install y python35u python35u libs python35u devel p...

python3異常例項 Python3 錯誤和異常

錯誤和異常 程式執行時有兩種可以分辨的錯誤 syntax error 和 exception 按中文來說,就是語法錯誤和異常。語法錯誤 語法錯誤也就是解析錯誤,是我們最優可能遇到的錯誤。while true print hello world file line 1,in?while true pr...