爬蟲的一些知識羅列

什麼是爬蟲

用我本身的話來總結就是經過模擬客戶端訪問服務器獲取數據的工具。爬蟲的簡易模型以下:前端

  • 網站服務器是咱們要訪問的目標,主要用來制定訪問規則(也就是咱們應該如何模擬能夠訪問該服務器的用戶以及如何訪問網站上的數據)
  • 爬蟲經過http或者https協議與網站服務器交互
  • 咱們作的主要工做是在定製爬蟲腳本,儘量的模仿客戶端的訪問
  • 本地存儲的選擇不少,能夠是文件的形式,也能夠存儲到數據庫中

爬蟲可能會涉及的技術羅列

能夠當作檢索的清單python

圖片是我之前學習爬蟲的時候收藏的,具體來源已經記不得了chrome

下面這張是簡易版的參考,打鉤的是我已經使用過和掌握的數據庫

爬蟲技巧分享

因爲網站開發人員使用技術不一樣和網站運維人員對訪問的限制沒有固定的爬蟲模板,並且爬蟲是須要長期維護的工程,一旦網頁中的一個class屬性發生改變或者api接口參數變化都須要修改爬蟲。可是一些技巧是能夠借鑑的。json

robots.txt

robots.txt是與搜索引擎約定的君子協議,他可以可咱們提供一些網站的信息。 下面是掘金的robots.txt ,咱們能夠收穫如下信息api

  • 容許的User-agent是匹配全部,有時候爬蟲失效多是UA的問題,這裏也許能找到答案
  • Request-rate: 1/1 建議1秒鐘爬取一個頁面 (那我想你設置延時應該內心有數了)
  • Crawl-delay: 5 建議爬蟲詢問的頻率是5秒一次
  • Disallow 是不容許爬取的目錄,這裏基本上能夠告訴咱們有哪些子路徑
User-agent: *
Request-rate: 1/1
Crawl-delay: 5

Disallow: /timeline
Disallow: /submit-entry
Disallow: /new-entry
Disallow: /edit-entry
Disallow: /notification
Disallow: /subscribe/subscribed
Disallow: /user/settings
Disallow: /reset-password
Disallow: /drafts
Disallow: /editor
Disallow: /user/invitation
Disallow: /user/wallet
Disallow: /entry/*/view$
Disallow: /auth
Disallow: /oauth
Disallow: /zhuanlan/*?sort=newest
Disallow: /zhuanlan/*?sort=comment
Disallow: /search
Disallow: /equation
複製代碼

curl

curl是命令行下的文件傳輸工具,這裏拿出來是由於發現了一個好的工具 curl.trillworks.com/#python 能夠直接將curl腳本轉成python requests庫的請求方式。瀏覽器

使用方法:
(1)打開chrome的開發者工具
(2)選擇想要訪問的連接,而後 copy -> copy as cURL(bash)
(3)粘貼到上面的那個網址中就能夠獲得簡易爬蟲腳本
複製代碼

使用 Katalon Recorder

有時候咱們會使用Selenium工具模擬瀏覽器進行數據爬取,可是苦於本身寫與瀏覽器交互的腳本。這裏推薦一個工具 Katalon Recorder能夠方便的產生交互腳本,在模擬搜索、模擬登錄、滾動、點擊的時候都頗有效。是一個瀏覽器插件,chrome和Firefox都有。使用起來也很簡單bash

(1) 先new一個新的錄製
(2) 開始錄製 record,這時候你能夠與網頁交互,這個插件會記錄你的操做(從加載網頁到中止錄製)
(3) 中止錄製以後,點擊export,選擇本身喜歡的語言導出就行
複製代碼

下面這一段是咱們實際使用的時候須要用到的,這樣就不用本身去編寫交互腳本了服務器

一種簡單的反爬技術

目前不少博客網站的next操做是根據上一次請求的最後一條數據的某個id做爲下一次請求的參數,不仔細看還發現不了(也虧返回的json字段命名語義化),典型網站有簡書和掘金,文章列表頁,請求的時候是根據上一次請求的最後一篇文章的信息做爲下一次獲取數據的請求參數。運維

js2py

蠻荒時代遇到js加密的網頁爬取是將混淆以後的js加密代碼強行還原爲py代碼,很累~~如今有了js2py這個方便的python庫,可以輕鬆不少,js轉py工具

移動端抓取替代網頁端

很多網站移動端的接口訪問比網頁端簡單多,反爬也弱一些,好比拉鉤網。 這裏有一個知識點:很多網站在處理請求的時候會根據UA來判斷客戶端類型,而後返回PC端頁面或者移動端頁面(案例:拉鉤網) 利用這個,咱們能夠將chrome的開發者模式調節爲手機模式,這樣就能夠獲取到移動端的接口,你會發現頁面也簡潔了接口也簡單了~

注:隨着前端技術的發展,適配多端的頁面也開始流行,因此前端牛逼

兩個思考

爲何爬蟲要設置User-Agent

  • 統計訪問頻率的時候有一部分是依賴於ua
  • 有時候須要根據ua返回不一樣的代碼
  • 對於前端還須要拿去判斷使用兼容性代碼

host

不少時候會設置HOST這個字段,其實能夠這樣理解,咱們訪問的時候使用的是域名,可是http協議訪問的時候使用的是ip,存在一臺服務器上有多個服務,這樣多個域名會解析成一個ip,當服務器接收到這個請求的時候他須要考慮由哪一個服務來處理(正常是反向代理判斷請求的路徑而後正則匹配轉發請求),可是我本身假想了一下也能夠用host來判斷轉發(這個啓發來源於Access-Control-Allow-Origin只能設置一個值,當須要設置多個值的時候我使用host字段+白名單來動態設置的)


做爲筆記記錄!感謝您與我一塊兒虛度時光

相關文章
相關標籤/搜索