1. 程式人生 > >python爬蟲的心得與總結

python爬蟲的心得與總結

最近老闆讓搞python爬蟲,提取地圖中水庫位置。在開展下一段探索前,先記一些心得體會。

一、工欲善其事必先利其器

想要爬取網站上的資訊,必須有一個好的工具。firefox和chrome都有不錯的工具,用chrome比較多,主要講一下它的使用。喜歡探索細節的小夥伴移到下面的連結:《神器——Chrome開發者工具(一)》以及《chrome Dev tools》。我在這兒介紹一些高頻使用的的功能。

1.F12:快捷鍵,(更多工具——開發者工具)。可以直接檢視當前頁面的html結構。有一點要注意,當前頁面的html結構可能是Js動態生成的。比如淘寶網頁的Josn資料來源,但在開發者工具下是HTML結構。這個時候使用滑鼠右鍵——檢視原始碼,可以看到json資料。

2.element選擇鍵,F12後,下圖中標示的方框內選項可以直接在頁面中檢索到對應的HTML標籤位置——即在頁面中點選選取。


3.console控制檯,在這裡可以看到一些與伺服器的互動資訊,上圖中藍色所指為清空,在此介面下,點選網頁上的連結、按鍵或是F5重新整理,可以看到與網頁的互動資訊。點選相應console下新出現的連結,可直接跳轉到對應資訊條目下。動態網頁這個工具有很大的幫助,更多資訊看第4條。控制檯下可以輸入一些變數函式,但因為沒用到,所以沒太多研究。有了解的可以分享下。

4.動態網頁下,console控制檯會出現一些連結,注意前面的資訊:XHR。在這裡插一點介紹,瞭解AJAX的小朋友可直接跳過。它是js進行http通訊的介面,現在也有新的版本,其實現動態重新整理的工具。喜歡細節的看下面的連結《

XMLHttpRequest Level 2》和《Introduction to XMLHttpRequest Level 2》以及《XMLHttpRequest--Living Standard》。好回到chrome工具,點選console下的連結後(下圖中1),跳轉到Network下,對應的資訊文字會有幾秒鐘的變色,找不到的請注意上面的filter選項(下圖中2)。network下各欄位的一些資訊,更多請看本段開頭連結,這兒講兩個有用的:在name欄位(下圖中3)下點選滑鼠左鍵,可檢視返回的response資訊;點選右鍵,可以複製curl資訊,這點比較重要,待會有講到。


常用到的就這些,有其他的以後再更新。

二、磨刀不誤砍柴工

這點體會太深了。我以前做過網頁,瞭解其中的邏輯(如有需要了解網頁及網頁結構的小夥伴,強烈推薦《W3c school》)。對python程式設計也算是熟悉吧。然後我就直接上手去搞爬蟲,爬蟲多是第三方庫,裡面的一些引數的使用是必須瞭解其中意義的,不然很容易走彎路,我因此浪費了些時間。所以強烈建議:應該先抽出些時間瞭解這些常用到的工具的基本知識。事實上,python爬蟲的這些庫函式許多是相似的,瞭解起來並不費太多時間。

1.靜態網頁:靜態網頁以及少量表單互動的網站可以使用如下的技術路線:

requests + bs4 + re——分別是網頁下載、BeautifulSoup提取網頁結構資訊和正則表示式。這三個為對應python庫名,網上相關內容很多。

scrapy——是一種爬蟲模組,可以配合re一塊使用,也比較容易瞭解。以上內容的學習需要感謝Mooc網站北京理工大學的課程《Python網路爬蟲與資訊提取》,簡單全面的介紹了靜態爬蟲的使用。

2.動態網頁。簡單動態網頁,需要有點選或者提交的可以參考selenium + phantomJS組合使用。selenium是模擬瀏覽器操作的工具,phantomJS則是沒有使用者互動介面的“瀏覽器”,你可以認為是一種模擬使用者點選操作的工具組合,來實現與伺服器的互動。

我爬取的是網頁地圖中的資訊,所以要更複雜一些。這也是下一階段需要探索的東西,網上的資料也不是很多。不過現在也不是毫無頭緒:對動態網頁的逆向工程也是可以獲取資料的。動態網頁是使用JS動態載入的,在chrome工具中點選console工具,檢視post的XHR資訊,點選XHR返回資訊的右鍵,可以檢視curl,將此連結放到瀏覽器的位址列,可以直接看到返回的json資訊。這兒有個關鍵詞:curl

當然,在沒有出結果之前還不能確定現在的思路對於不對,對於複雜的動態網頁,還需要更多的探索。先在此做個過去的總結,也歡迎瞭解和正在瞭解的給些意見。