天天看點

老司機帶你學爬蟲——Python爬蟲技術分享

什麼是“爬蟲”?

簡單來說,寫一個從web上擷取需要資料并按規定格式存儲的程式就叫爬蟲;

爬蟲理論上步驟很簡單,第一步擷取html源碼,第二步分析html并拿到資料。但實際操作,老麻煩了~

用Python寫“爬蟲”有哪些友善的庫

常用網絡請求庫:requests、urllib、urllib2、

urllib和urllib2是Python自帶子產品,requests是第三方庫

常用解析庫和爬蟲架構:BeautifulSoup、lxml、HTMLParser、selenium、Scrapy

HTMLParser是Python自帶子產品;

BeautifulSoup可以将html解析成Python文法對象,直接操作對象會非常友善;

lxml可以解析xml和html标簽語言,優點是速度快;

selenium調用浏覽器的driver,通過這個庫你可以直接調用浏覽器完成某些操作,比如輸入驗證碼;

Scrapy很強大且有名的爬蟲架構,可以輕松滿足簡單網站的爬取; 這個python學習(q-u-n):二二七,四三五,四五零 期待大家一起交流讨論,講實話還是一個非常适合學習的地方的。軟體各種入門資料

“爬蟲”需要掌握哪些知識

1)超文本傳輸協定HTTP:HTTP協定定義了浏覽器怎樣向網際網路伺服器請求網際網路文檔,以及伺服器怎樣把文檔傳送給浏覽器。常用的HTTP方法有GET、POST、PUT、DELETE。

【插曲:某站長做了一個網站,奇葩的他把删除的操作綁定在GET請求上。百度或者谷歌爬蟲爬取網站連結,都是用的GET請求,而且一般用浏覽器通路網頁都是GET請求。在谷歌爬蟲爬取他網站的資訊時,該網站自動删除了資料庫的全部資料】

2)統一資源定位符URL: URL是用來表示從網際網路上得到的資源位置和通路這些資源的方法。URL給資源的位置提供一種抽象的識别方法,并用這種方法給資源定位。隻要能夠對資源定位,系統就可以對資源進行各種操作,如存取、更新、替換和查找其屬性。URL相當于一個檔案名在網絡範圍的擴充。

3)超文本标記語言HTTP:HTML指的是超文本标記語言,是使用标記标簽來描述網頁的。HTML文檔包含HTML标簽和純文字,也稱為網頁。Web 浏覽器的作用是讀取 HTML 文檔,并以網頁的形式顯示出它們。浏覽器不會顯示 HTML 标簽,而是使用标簽來解釋頁面的内容。簡而言之就是你要懂點前端語言,這樣描述更直覺貼切。

4)浏覽器調試功能:學爬蟲就是抓包,對請求和響應進行分析,用代碼來模拟

進階爬蟲

熟練了基本爬蟲之後,你會想着擷取更多的資料,抓取更難的網站,然後你就會發現擷取資料并不簡單,而且現在反爬機制也非常的多。

a.爬取知乎、簡書,需要登入并将下次的請求時将sessions帶上,保持登入姿态;

b.爬取亞馬遜、京東、天貓等商品資訊,由于資訊量大、反爬機制完善,需要分布式【這裡就難了】爬取,以及不斷切換USER_AGENT和代理IP;

c.滑動或下拉加載和同一url加載不同資料時,涉及ajax的異步加載。這裡可以有簡單的傳回html代碼、或者json資料,也可能有更變态的傳回js代碼然後用浏覽器執行,邏輯上挺簡單、但是寫代碼那叫一個苦哇;

d.還有點是需要面對的,驗證碼識别。這個有專門解析驗證碼的平台.....不屬于爬蟲範疇了,自己處理需要更多的資料分析知識。

e.資料儲存,關系資料庫和非關系資料庫的選擇和使用,設計防備援資料庫表格,去重。大量資料存儲資料庫,會變得很頭疼,

f.編碼解碼問題,資料的存儲涉及一個格式的問題,python2或者3也都會涉及編碼問題。另外網頁結構的不規範性,編碼格式的不同很容易觸發編碼異常問題。下圖一個簡單的轉碼規則

一些常見的限制方式

a.Basic Auth:一般會有使用者授權的限制,會在headers的Autheration字段裡要求加入;

b.Referer:通常是在通路連結時,必須要帶上Referer字段,伺服器會進行驗證,例如抓取京東的評論;

c.User-Agent:會要求真是的裝置,如果不加會用程式設計語言包裡自有User-Agent,可以被辨識出來;

d.Cookie:一般在使用者登入或者某些操作後,服務端會在傳回包中包含Cookie資訊要求浏覽器設定Cookie,沒有Cookie會很容易被辨識出來是僞造請求;也有本地通過JS,根據服務端傳回的某個資訊進行處理生成的加密資訊,設定在Cookie裡面;

e.Gzip:請求headers裡面帶了gzip,傳回有時候會是gzip壓縮,需要解壓;

f.JavaScript加密操作:一般都是在請求的資料包内容裡面會包含一些被javascript進行加密限制的資訊,例如新浪微網誌會進行SHA1和RSA加密,之前是兩次SHA1加密,然後發送的密碼和使用者名都會被加密;

g.網站自定義其他字段:因為http的headers可以自定義地段,是以第三方可能會加入了一些自定義的字段名稱或者字段值,這也是需要注意的。

真實的請求過程中,其實不止上面某一種限制,可能是幾種限制組合在一次,比如如果是類似RSA加密的話,可能先請求伺服器得到Cookie,然後再帶着Cookie去請求伺服器拿到公鑰,然後再用js進行加密,再發送資料到伺服器。是以弄清楚這其中的原理,并且耐心分析很重要。

總結

爬蟲入門不難,但是需要知識面更廣和更多的耐心