爬蟲簡介 與 request 庫
阿新 • • 發佈:2020-12-06
1. 爬蟲簡介
2. requests 爬取豆瓣短評
1. 爬蟲簡介
爬蟲的定義
網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。
爬蟲有什麼用
- 市場分析:電商分析、商圈分析、一二級市場分析等
- 市場監控:電商、新聞、房源監控等
- 商機發現:招投標情報發現、客戶資料發掘、企業客戶發現等
認識網址的構成
一個網站的網址一般由域名+自己編寫的頁面所構成。我們在訪問同一網站的網頁時,域名一般是不會改變的,因此我們爬蟲所需要解析的就是網站自己所編寫的不同頁面的入口url,只有解析出來各個頁面的入口,才能開始我們的爬蟲。
瞭解網頁的兩種載入方法
只有同步載入的資料才能直接在網頁原始碼中直接檢視到,非同步載入的資料直接檢視網頁原始碼是看不到的。
- 同步載入:改變網址上的某些引數會導致網頁發生改變,例如:www.itjuzi.com/company?page=1(改變page=後面的數字,網頁會發生改變)。
- 非同步載入:改變網址上的引數不會使網頁發生改變,例如:www.lagou.com/gongsi/(翻頁後網址不會發生變化)。
- 同步任務:在主執行緒上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務。
- 非同步任務:不進入主執行緒、而進入"任務佇列"(task queue)的任務,只有等主執行緒任務執行完畢,"任務佇列"開始通知主執行緒,請求執行任務,該任務才會進入主執行緒執行(如回撥函式)。
認識網頁原始碼的構成
在網頁中右鍵點選檢視網頁原始碼,可以檢視到網頁的原始碼資訊。 原始碼一般由三個部分組成,分別是:- html:描述網頁的內容結構
- css:描述網頁的樣式排版佈局
- JavaScript:描述網頁的事件處理,即滑鼠或鍵盤在網頁元素上的動作後的程式
檢視網頁請求
以chrome瀏覽器為例,在網頁上點選滑鼠右鍵,檢查(或者直接F12),選擇network,重新整理頁面,選擇ALL下面的第一個連結,這樣就可以看到網頁的各種請求資訊。請求頭(Request Headers):
- Accept: text/html,image/*(瀏覽器可以接收的型別)
- Accept-Charset: ISO-8859-1(瀏覽器可以接收的編碼型別)
- Accept-Encoding: gzip,compress(瀏覽器可以接收壓縮編碼型別)
- Accept-Language: en-us,zh-cn(瀏覽器可以接收的語言和國家型別)
- Host: www.it315.org:80(瀏覽器請求的主機和埠)
- If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(某個頁面快取時間)
- Referer: http://www.it315.org/index.jsp(請求來自於哪個頁面)
- User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)(瀏覽器相關資訊)
- Cookie:(瀏覽器暫存伺服器傳送的資訊)
- Connection: close(1.0)/Keep-Alive(1.1)(HTTP請求的版本的特點)
- Date: Tue, 11 Jul 2000 18:23:51 GMT(請求網站的時間)
響應頭(Response Headers):
- Location: http://www.it315.org/index.jsp(控制瀏覽器顯示哪個頁面)
- Server:apache tomcat(伺服器的型別)
- Content-Encoding: gzip(伺服器傳送的壓縮編碼方式)
- Content-Length: 80(伺服器傳送顯示的位元組碼長度)
- Content-Language: zh-cn(伺服器傳送內容的語言和國家名)
- Content-Type: image/jpeg; charset=UTF-8(伺服器傳送內容的型別和編碼型別)
- Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(伺服器最後一次修改的時間)
- Refresh: 1;url=http://www.it315.org(控制瀏覽器1秒鐘後轉發URL所指向的頁面)
- Content-Disposition: attachment; filename=aaa.jpg(伺服器控制瀏覽器下載方式開啟檔案)
- Transfer-Encoding: chunked(伺服器分塊傳遞資料到客戶端)
- Set-Cookie: SS=Q0=5Lb_nQ; path=/search(伺服器傳送Cookie相關的資訊)
- Expires: -1(伺服器控制瀏覽器不要快取網頁,預設是快取)
- Cache-Control: no-cache(伺服器控制瀏覽器不要快取網頁)
- Pragma: no-cache(伺服器控制瀏覽器不要快取網頁)
- Connection: close/Keep-Alive(HTTP請求的版本的特點)
- Date: Tue, 11 Jul 2000 18:23:51 GMT(響應網站的時間)
通用的網路爬蟲框架
- 挑選種子URL;
- 將這些URL放入待抓取的URL佇列;
- 取出待抓取的URL,下載並存儲進已下載網頁庫中。此外,將這些URL放入已抓取URL佇列;
- 分析已抓取佇列中的URL,並且將URL放入待抓取URL佇列,從而進入下一迴圈。
2. requests 爬取豆瓣短評
Requests庫的主要方法
requests.get方法:
1 # 使用get方法傳送請求,返回包含網頁資料的Response並存儲到Response物件r中 2 r = requests.get(url)Response物件的屬性:
- r.status_code:http請求的返回狀態,200表示連線成功(HTTP狀態碼)
- r.text:返回物件的文字內容
- r.content:猜測返回物件的二進位制形式
- r.encoding:分析返回物件的編碼方式
- r.apparent_encoding:響應內容編碼方式(備選編碼方式)
示例:分析豆瓣短評網頁
1 import requests 2 3 url = ' https://book.douban.com/subject/27147922/?icn=index-editionrecommend' 4 r = requests.get(url, timeout=20) # 設定超時時間為20秒 5 # #print(r.text) # 列印返回文字 6 # 丟擲異常 7 print(r.raise_for_status()) # None