python爬蟲常識

什麼是爬蟲?css

  網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更常常的稱爲網頁追逐者),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本。另一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。html

  其實通俗的講就是經過程序去獲取web頁面上本身想要的數據,也就是自動抓取數據mysql

爬蟲本質 :web

  模擬瀏覽器打開網頁,獲取網頁中咱們想要的那部分數據ajax

  瀏覽器打開網頁的過程:
    當你在瀏覽器中輸入地址後,通過DNS服務器找到服務器主機,向服務器發送一個請求,服務器通過解析後發送給用戶瀏覽器結果,包括html,js,css等文件內容,瀏覽器解析出來最後呈現給用戶在瀏覽器上看到的結果正則表達式

    因此用戶看到的瀏覽器的結果就是由HTML代碼構成的,咱們爬蟲就是爲了獲取這些內容,經過分析和過濾html代碼,從中獲取咱們想要資源(文本,圖片,視頻.....)sql

爬蟲的基本流程 :數據庫

  發起請求
    經過HTTP庫向目標站點發起請求,也就是發送一個Request,請求能夠包含額外的header等信息,等待服務器響應瀏覽器

  獲取響應內容
    若是服務器能正常響應,會獲得一個Response,Response的內容即是所要獲取的頁面內容,類型多是HTML,Json字符串,二進制數據(圖片或者視頻)等類型服務器

  解析內容
    獲得的內容多是HTML,能夠用正則表達式,頁面解析庫進行解析,多是Json,能夠直接轉換爲Json對象解析,多是二進制數據,能夠作保存或者進一步的處理

  保存數據
    保存形式多樣,能夠存爲文本,也能夠保存到數據庫,或者保存特定格式的文件

什麼是Request, Response :

  瀏覽器發送消息給網址所在的服務器,這個過程就叫作HTPP Request

  服務器收到瀏覽器發送的消息後,可以根據瀏覽器發送消息的內容,作相應的處理,而後把消息回傳給瀏覽器,這個過程就是HTTP Response

  瀏覽器收到服務器的Response信息後,會對信息進行相應的處理,而後展現

Request中包含什麼 :

  請求方式

    主要有:GET/POST兩種類型經常使用,另外還有HEAD/PUT/DELETE/OPTIONS
GET和POST的區別就是:請求的數據GET是在url中,POST則是存放在頭部

    GET:向指定的資源發出「顯示」請求。使用GET方法應該只用在讀取數據,而不該當被用於產生「反作用」的操做中,例如在Web Application中。其中一個緣由是GET可能會被網絡蜘蛛等隨意訪問

    POST:向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會建立新的資源或修改現有資源,或兩者皆有。

    HEAD:與GET方法同樣,都是向服務器發出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在於,使用這個方法能夠在沒必要傳輸所有內容的狀況下,就能夠獲取其中「關於該資源的信息」(元信息或稱元數據)。

    PUT:向指定資源位置上傳其最新內容。

    OPTIONS:這個方法可以使服務器傳回該資源所支持的全部HTTP請求方法。用'*'來代替資源名稱,向Web服務器發送OPTIONS請求,能夠測試服務器功能是否正常運做。

    DELETE:請求服務器刪除Request-URI所標識的資源。

  請求URL

    URL,即統一資源定位符,也就是咱們說的網址,統一資源定位符是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。

    URL的格式由三個部分組成:
    第一部分是協議(或稱爲服務方式)。
    第二部分是存有該資源的主機IP地址(有時也包括端口號)。
    第三部分是主機資源的具體地址,如目錄和文件名等。

    爬蟲爬取數據時必需要有一個目標的URL才能夠獲取數據,所以,它是爬蟲獲取數據的基本依據。

  請求頭

    包含請求時的頭部信息,如User-Agent,Host,Cookies等信息,下圖是請求請求百度時,全部的請求頭部信息參數

  請求體:

    請求時攜帶的數據, 入提交表單數據時候的表單數據(POST)

Response中包含了什麼 :

  全部HTTP響應的第一行都是狀態行, 依次是當前HTTP版本號, 3位數字組成的狀態碼, 以及描述狀態的短語, 彼此空格分隔.

  響應狀態 :

    有多種響應狀態, 如: 200表明成功, 301跳轉, 404頁面找不到, 502服務器錯誤

    1xx消息 -- 請求已被服務器接收, 繼續處理

    2xx成功 -- 請求已經成功被服務器接收, 理解, 並接受

    3xx重定向 -- 須要後續操做才能完成這一請求

    4xx請求錯誤 -- 請求含有詞法錯誤或者沒法被執行

    5xx服務器錯誤 -- 服務器在處理某個請求時發生錯誤

  響應頭 :

    如內容類型, 類型的長度, 服務器信息, 設置Cookie, 以下圖 :

  響應體 :

    最主要的部分, 包含請求資源的內容, 如網頁HTML, 圖片, 二進制數據等

能爬取到什麼樣的數據 :

  網頁文本: 如HTML文檔, Json格式化文本等

  圖片: 獲取到的是二進制文件, 保存爲圖片格式

  視頻: 一樣是二進制文件

  其餘: 只要請求到的, 均可以獲取

如何解析數據 :

  1. 直接處理

  2. Json解析

  3. 正則表達式處理

  4. BeautifulSoup解析處理

  5. PyQuery解析處理

  6. Xpath解析處理

關於抓取的頁面數據和瀏覽器裏看到的不同的問題 :

  出現這種狀況是由於, 不少網站中的數據都是經過js, ajax動態加載的, 因此直接經過get請求獲取的頁面和瀏覽器顯示的不一樣.

  如何解決js渲染問題?

    分析ajax

    Selenium/webdriver

    Splash

    PyV8, Ghost.py

怎麼保存數據 :

  文本: 純文本, Json, Xml等

  關係型數據庫: mysql, oracle, sql server等結構化數據庫

  非關係性數據庫: MongoDB, Redis等k-v形式存儲

相關文章
相關標籤/搜索