Python爬蟲(1):基本原理

什麼是爬蟲?

爬蟲即網絡爬蟲,英文是Web Spider。翻譯過來就是網絡上爬行的蜘蛛,如果把互聯網看作一張大網,那麼爬蟲就是在大網上爬來爬去的蜘蛛,碰到想要的食物,就把他抓取出來。

我們在瀏覽器中輸入一個網址,敲擊回車,看到網站的頁面信息。這就是瀏覽器請求了網站的服務器,獲取到網絡資源。那麼,爬蟲也相當於模擬瀏覽器發送請求,獲得到HTML代碼。HTML代碼裏通常包含了標籤和文字信息,我們就從中提取到我們想要的信息。

通常爬蟲是從某個網站的某個頁面開始,爬取這個頁面的內容,找到網頁中的其他鏈接地址,然後從這個地址爬到下一個頁面,這樣一直不停的爬下去,進去批量的抓取信息。那麼,我們可以看出網絡爬蟲就是一個不停爬取網頁抓取信息的程序。

爬蟲的基本流程

1.發起請求:

通過HTTP庫向目標站點發起請求,即發送一個Request,請求可以包含額外的headers等信息,然後等待服務器響應。這個請求的過程就像我們打開瀏覽器,在瀏覽器地址欄輸入網址:www.baidu.com,然後點擊回車。這個過程其實就相當於瀏覽器作爲一個瀏覽的客戶端,向服務器端發送了 一次請求。

2.獲取響應內容:

如果服務器能正常響應,我們會得到一個ResponseResponse的內容便是所要獲取的內容,類型可能有HTMLJson字符串,二進制數據(圖片,視頻等)等類型。這個過程就是服務器接收客戶端的請求,進過解析發送給瀏覽器的網頁HTML文件。

3.解析內容:

得到的內容可能是HTML,可以使用正則表達式,網頁解析庫進行解析。也可能是Json,可以直接轉爲Json對象解析。可能是二進制數據,可以做保存或者進一步處理。這一步相當於瀏覽器把服務器端的文件獲取到本地,再進行解釋並且展現出來。

4.保存數據:

保存的方式可以是把數據存爲文本,也可以把數據保存到數據庫,或者保存爲特定的jpg,mp4 等格式的文件。這就相當於我們在瀏覽網頁時,下載了網頁上的圖片或者視頻。

Request

1.什麼是Request?

瀏覽器發送信息給該網址所在的服務器,這個過程就叫做HTTP Request

2.Request中包含什麼?

  • 請求方式:請求方式的主要類型是GETOST兩種,另外還有HEADPUTDELETE等。GET 請求的請求參數會顯示在URL鏈接的後面,比如我們打開百度,搜索“圖片”,我們會看到請求的URL鏈接爲https://www.baidu.com/s?wd=圖片。而 POST 請求的請求參數會存放在Request內,並不會出現在 URL 鏈接的後面,比如我們登錄知乎,輸入用戶名和密碼,我們會看到瀏覽器開發者工具的Network頁,Request請求有Form Data的鍵值對信息,那裏就存放了我們的登錄信息,有利於保護我們的賬戶信息安全;
  • 請求 URL:URL 全稱是統一資源定位符,也就是我們說的網址。比如一張圖片,一個音樂文件,一個網頁文檔等都可以用唯一URL來確定,它包含的信息指出文件的位置以及瀏覽器應該怎麼去處理它;
  • 請求頭(Request Headers):請求頭包含請求時的頭部信息,如User-Agent(指定瀏覽器的請求頭),HostCookies等信息;
  • 請求體:請求體是請求是額外攜帶的數據,比如登錄表單提交的登錄信息數據。

Response

1.什麼是Response?

服務器收到瀏覽器發送的信息後,能夠根據瀏覽器發送信息的內容,做出相應的處理,然後把消息回傳給瀏覽器,這個過程就叫做HTTP Response

2.Response中包含什麼?

  • 響應狀態:有多種響應狀態,比如200代表成功,301 跳轉頁面,404 表示找不到頁面,502 表示服務器錯誤;
  • 響應頭(Response Headers):比如內容類型,內容長度,服務器信息,設置Cookie等;
  • 響應體:響應體最主要的部分,包含了請求資源的內容,比如網頁 HTML 代碼,圖片二進制數據等。

簡單演示

import requests # 導入requests庫,需要安裝

 

# 模擬成瀏覽器訪問的頭

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

resp = requests.get('https://www.baidu.com',headers=headers)

print(resp.text) # 打印出網頁源代碼

print(resp.status_code) # 打印出狀態碼

運行成功後可以看到打印出來的 html 源代碼和 200 狀態碼了。這就基本上實現了爬蟲的RequestResponse的過程。

能抓到什麼樣的數據?

  • 網頁文本:如 HTML 文檔,Ajax加載的Json格式文本等;
  • 圖片,視頻等:獲取到的是二進制文件,保存爲圖片或視頻格式;
  • 其他只要能請求到的,都能獲取。

演示

import requests

 

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

resp = requests.get('http://www.baidu.com/img/baidu_jgylogo3.gif',headers=headers)

print(resp.content) # 二進制文件使用content

# 保存圖片

with open('logo.gif','wb') as f:

    f.write(resp.content)

    print('Ok')

成功運行就可以看到打印出來的圖片的二進制數據,可保存成功後打印的 OK,這個時候我們打開文件夾就可以看到下載下來的圖片了。這幾行代碼就簡單的演示了爬蟲保存文件的過程。

解析方式有哪些?

  • 直接處理,比如簡單的頁面文檔,只要去除一些空格的數據;
  • Json解析,處理Ajax加載的頁面;
  • 正則表達式;
  • BeautifulSoup庫;
  • PyQuery;
  • XPath。

看到這裏,大家是不是已經對爬蟲的基本工作原理有了清晰的認識了呢。當然,羅馬並不是一天建成的,只要積累了足夠多的經驗,大家肯定能成爲爬蟲大神的。

接下來,我會給大家繼續分享一些我在學習爬蟲時的經驗總結。

鏈接:https://www.jqhtml.com/13259.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章