入職公司已經數週,因為寫了不少爬蟲,對爬蟲的程式碼有些心得,因此記錄一下。
一、獲取html頁面的方法
通過python獲取頁面的常用方法有requests和selenium方法,當然使用python自帶的urllib也可以獲取html頁面,但是其使用邏輯實在是複雜,相比之下,requests方法更像是給人類使用的方法。
1、requests可以通過get或者post來獲取頁面資訊,對於使用GET方式的頁面,可以使用requests.get(url)來獲取相應的網頁原始碼。POST方式也是常見的網頁存取方法,有些網頁只能通過POST方法來存取,如果此時採用GET方法存取的話,網站就會返回錯誤的資訊,使用POST方法,通常需要傳入字典或者JSON格式的資料,這個資料需要通過遊覽器的network觀察來得到其格式型別。
2、selenium原本是一種自動化的測試工具,其也可以解決一些requests無法解決的問題,selenium在使用中,需要先下載相應的遊覽器驅動,放置於遊覽器根目錄和python根目錄中,並新增到環境變數中去。之後,便可以通過selenium來控制遊覽器的行為,selenium在某種程度上相當於模擬了人上網的行為,因為程式碼邏輯更容易理解。
二、html頁面的解析
獲取到html頁面後,如果定位到需要的內容呢,python提供了多種方法,包括正規表示式、Xpath和Beatiful Soup,包括selenium也提供了一些尋找網頁元素的方法。
1、首先從正規表示式說起,對於靜態頁面來說,正規表示式幾乎是萬能的存在,可以說,只要精通了正規表示式,爬取靜態頁面就不在話下了。需要注意的是,正規表示式預設是貪婪匹配,即匹配其所有匹配的最長字元,而在末尾加上?後,則匹配相應的最短字元,一般來說,正規表示式(.*?)可以完成大部分的匹配任務。
2、xpath是一種查詢語言,它可以在html樹狀結構中尋找節點,即一種根據地址找尋內容的語言,xpath是我最喜歡使用的一種方法,因為使用正規表示式時,經常會出現不明原因而無法提取想要的內容的情況,而xpath,利用谷歌遊覽器提供的工具,可以很好的定位所需內容的位置,使用熟練後,可以大大提高程式碼的編寫效率。
3、Beatiful Soup4即bs4,是python的一個第三方庫,可以從html和xml中提取資料,bs4由於是使用python開發,執行速度上比xpath要慢。bs4通過find_all()和find()來查詢內容。
三、編碼問題
爬蟲爬取的內容,有時候會是亂碼的情況,需要進行相應的編碼處理
四、反爬蟲
反爬蟲的手段主要包括換headers,隨機睡眠時間和使用代理ip
五、儲存
1、儲存到文字中
2、儲存到資料庫中