什麼是爬蟲?
網路爬蟲(又被稱為網頁蜘蛛,網路機械人,在foaf社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。
其實通俗的講就是通過程式去獲取web頁面上自己想要的資料,也就是自動抓取資料
爬蟲本質 :
模擬瀏覽器開啟網頁,獲取網頁中我們想要的那部分資料
瀏覽器開啟網頁的過程:
當你在瀏覽器中輸入位址後,經過dns伺服器找到伺服器主機,向伺服器傳送乙個請求,伺服器經過解析後傳送給使用者瀏覽器結果,包括html,js,css等檔案內容,瀏覽器解析出來最後呈現給使用者在瀏覽器上看到的結果
爬蟲的基本流程 :
發起請求
通過http庫向目標站點發起請求,也就是傳送乙個request,請求可以包含額外的header等資訊,等待伺服器響應
獲取響應內容解析內容
得到的內容可能是html,可以用正規表示式,頁面解析庫進行解析,可能是json,可以直接轉換為json物件解析,可能是二進位制資料,可以做儲存或者進一步的處理
儲存資料
儲存形式多樣,可以存為文字,也可以儲存到資料庫,或者儲存特定格式的檔案
什麼是request, response :
瀏覽器傳送訊息給**所在的伺服器,這個過程就叫做htpp request
伺服器收到瀏覽器傳送的訊息後,能夠根據瀏覽器傳送訊息的內容,做相應的處理,然後把訊息回傳給瀏覽器,這個過程就是http response
瀏覽器收到伺服器的response資訊後,會對資訊進行相應的處理,然後展示
request中包含什麼 :
請求方式
主要有:get/post兩種型別常用,另外還有head/put/delete/options
get和post的區別就是:請求的資料get是在url中,post則是存放在頭部
post:向指定資源提交資料,請求伺服器進行處理(例如提交表單或者上傳檔案)。資料被包含在請求本文中。這個請求可能會建立新的資源或修改現有資源,或二者皆有。
head:與get方法一樣,都是向伺服器發出指定資源的請求。只不過伺服器將不傳回資源的本文部分。它的好處在於,使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中「關於該資源的資訊」(元資訊或稱元資料)。
options:這個方法可使伺服器傳回該資源所支援的所有http請求方法。用'*'來代替資源名稱,向web伺服器傳送options請求,可以測試伺服器功能是否正常運作。
delete:請求伺服器刪除request-uri所標識的資源。
請求url
url,即統一資源定位符,也就是我們說的**,統一資源定位符是對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示,是網際網路上標準資源的位址。網際網路上的每個檔案都有乙個唯一的url,它包含的資訊指出檔案的位置以及瀏覽器應該怎麼處理它。
url的格式由三個部分組成:
第一部分是協議(或稱為服務方式)。
第二部分是存有該資源的主機ip位址(有時也包括埠號)。
第三部分是主機資源的具體位址,如目錄和檔名等。
爬蟲爬取資料時必須要有乙個目標的url才可以獲取資料,因此,它是爬蟲獲取資料的基本依據。
請求頭
請求體:
請求時攜帶的資料, 入提交表單資料時候的表單資料(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形式儲存
python常識 python小常識
python 規範 python 官方提供有一系列 pep python enhancement proposals 文件,其中第 8 篇文件專門針對 python 的 格式給出了建議,也就是俗稱的 pep8。指定編碼格式 預設情況下,python 3 原始碼檔案以 utf 8 編碼,所有字串都是 ...
爬蟲requests操作與網路常識需知
1.使用瀏覽器訪問 1.傳送請求 2.服務端接收請求 3.服務端返回響應 4.瀏覽器美化頁面給你看 2.使用爬蟲 模擬瀏覽器訪問 1.傳送請求 2.服務端接收請求 3.服務端返回響應 4.爬蟲接收伺服器返回的響應通過 篩選出需要的資料並儲存到庫中 基於網路傳輸資料,都是二進位制 在python中也可...
Python 常識學習總結
常識python 是一種解釋型語言,python,本義是指 蟒蛇 1989 年,荷蘭人 guido van rossum 後續簡稱 guido 為了打發聖誕節的無趣,決心開發乙個新的指令碼解釋程式,於是便誕生了一種物件導向的解釋型高階程式語言,被命名為 python 高階語言 解釋型語言 pytho...