一、什麼是爬蟲 首先簡單的理解一下爬蟲。即請求網站並且提取自己所需的數據的一個過程。至於怎麼爬如何爬,將是後面進行學習的內容,暫且不必深究。通過我們的程式,可以代替我們向伺服器發送請求,然後進行批量、大量的數據的下載。 二、爬蟲的基本流程 三、request請求包含什麼 當我們通過瀏覽器向伺服器發送 ...
一、什麼是爬蟲
首先簡單的理解一下爬蟲。即請求網站並且提取自己所需的數據的一個過程。至於怎麼爬,將是後面進行學習的內容,暫且不必深究。通過我們的程式,可以代替我們向伺服器發送請求,然後進行批量、大量的數據的下載。
二、爬蟲的基本流程
- 發起請求:通過url向伺服器發起request請求,請求可以包含額外的header信息。
- 獲取響應內容:如果伺服器正常響應,那我們將會收到一個response,response即為我們所請求的網頁內容,或許包含HTML,Json字元串或者二進位的數據(視頻、圖片)等。
- 解析內容:如果是HTML代碼,則可以使用網頁解析器進行解析,如果是Json數據,則可以轉換成Json對象進行解析,如果是二進位的數據,則可以保存到文件進行進一步處理。
- 保存數據:可以保存到本地文件,也可以保存到資料庫(MySQL,Redis,Mongodb等)
三、request請求包含什麼
當我們通過瀏覽器向伺服器發送request請求時,這個request包含了一些什麼信息呢?我們可以通過chrome的開發者工具進行說明(如果不知道如何使用看本篇備註)。
- 請求方式:最常用的請求方式包括get請求和post請求。post請求在開發中最常見的是通過表單進行提交,從用戶角度來講,最常見的就是登錄驗證。當你需要輸入一些信息進行登錄的時候,這次請求即為post請求。
- url統一資源定位符:一個網址,一張圖片,一個視頻等都可以用url去定義。當我們請求一個網頁時,我們可以查看network標簽,第一個通常是一個document,也就是說這個document是一個未加外部圖片、css、js等渲染的html代碼,在這個document的下麵我們會看到一系列的jpg,js等,這是瀏覽器根據html代碼發起的一次又一次的請求,而請求的地址,即為html文檔中圖片、js等的url地址
- request headers:請求頭,包括這次請求的請求類型,cookie信息以及瀏覽器類型等。 這個請求頭在我們進行網頁抓取的時候還是有些作用的,伺服器會通過解析請求頭來進行信息的審核,判斷這次請求是一次合法的請求。所以當我們通過程式偽裝瀏覽器進行請求的時候,就可以設置一下請求頭的信息。
- 請求體:post請求會把用戶信息包裝在form-data裡面進行提交,因此相比於get請求,post請求的Headers標簽的內容會多出Form Data這個信息包。get請求可以簡單的理解為普通的搜索回車,信息將會以?間隔添加在url的後面。
四、response包含什麼
- 響應狀態:通過Headers中的General可以看到status code。200表示成功,301跳轉,404找不到網頁,502伺服器錯誤等。
- 響應頭:包括了內容的類型,cookie信息等。
- 響應體:請求的目的就是為了得到響應體,包括html代碼,Json以及二進位數據等。
五、簡單的請求演示
通過Python的request庫進行網頁請求:
輸出的結果就是還未渲染的網頁代碼,即請求體的內容。可以查看響應頭的信息:
查看狀態碼:
還可以將請求頭添加到請求信息裡面:
抓取圖片(百度logo):
六、如何解決JavaScript渲染問題
使用Selenium webdriver
輸入print(driver.page_source)可以看到,這次的代碼是渲染之後的代碼。
【備註】chrome瀏覽器的使用
- F12打開開發者工具
Elements標簽顯示了顯然後的HTML代碼。
- Network標簽
Network標簽下有瀏覽器請求的數據,點開可以查看詳細的信息,如上提到的request headers、response headers等等。
YouTube學習視頻(Elnino Chen老師):https://www.youtube.com/channel/UC0gXu_5GOwzAaxkFymbwRhg