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通訊的介面,現在也有新的版本,其實現動態重新整理的工具。喜歡細節的看下面的連結《
常用到的就這些,有其他的以後再更新。
二、磨刀不誤砍柴工
這點體會太深了。我以前做過網頁,瞭解其中的邏輯(如有需要了解網頁及網頁結構的小夥伴,強烈推薦《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
當然,在沒有出結果之前還不能確定現在的思路對於不對,對於複雜的動態網頁,還需要更多的探索。先在此做個過去的總結,也歡迎瞭解和正在瞭解的給些意見。