第一次爬蟲案例

               最近爬取了一個音頻直播的網站,我們從中提取,直播的標題名稱,音頻源的地址;

爬蟲的基本流程:
1、發起請求通過HTTP庫向目標站點發起請求,也就是發送一個Request,請求可以包含額外的header等信息,等待服務器響應
獲取響應內容如果服務器能正常響應,會得到一個Response,Response的內容便是所要獲取的頁面內容,類型可能是HTML,Json字符串,二進制數據(圖片或者視頻)等類型
2、什麼是Request,Response
瀏覽器發送消息給網址所在的服務器,這個過程就是Request(請求)
服務器收到瀏覽器發送的消息後,能夠根據瀏覽器發送消息的內容,做相應的處理,然後把消息回傳給瀏覽器,這個過程就是Response(響應)
瀏覽器收到服務器的Response信息後,會對信息進行相應的處理,然後展示
Request中包含什麼?
請求方式
主要有:GET/POST兩種類型常用,另外還有HEAD/PUT/DELETE/OPTIONS
GET和POST的區別就是:請求的數據GET是在url中,POST則是存放在頭部
GET:向指定的資源發出請求“資源”的請求。
POST:向指定資源提交數據,請求服務器進行處理,這個請求可能會創建新的資源或修改現有資源。
請求URL
URL,即統一資源定位符,也就是我們說的網址,統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。
URL的格式由三個部分組成:第一部分是協議(或稱爲服務方式)。第二部分是存有該資源的主機IP地址(有時也包括端口號)。第三部分是主機資源的具體地址,如目錄和文件名等。
爬蟲爬取數據時必須要有一個目標的URL纔可以獲取數據,因此,它是爬蟲獲取數據的基本依據。
請求頭
包含請求時的頭部信息,如User-Agent,Host,Cookies等信息
在這裏插入圖片描述
請求體
請求是攜帶的數據,如提交表單數據時候的表單數據(POST)
Response中包含了什麼
所有HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態代碼,以及描述狀態的短語,彼此由空格分隔。
響應狀態
有多種響應狀態,如:200代表成功,301跳轉,404找不到頁面,502服務器錯誤
1xx消息——請求已被服務器接收,繼續處理
2xx成功——請求已成功被服務器接收、理解、並接受
3xx重定向——需要後續操作才能完成這一請求
4xx請求錯誤——請求含有詞法錯誤或者無法被執行
5xx服務器錯誤——服務器在處理某個正確請求時發生錯誤
響應頭
如內容類型,類型的長度,服務器信息,如下圖
在這裏插入圖片描述

下面我們就來分析網頁了:
在這裏插入圖片描述
我們查看“北京”的元素定位是在:div,“爺爺”id=home-tags下面的“爸爸”ul 下面的 li標籤下的 a標籤

這一步我們提取出來地域分佈的省市信息:
在這裏插入圖片描述

第一步已經完成,
第二步接下來我們要進入到每個省市下面去提取每個電臺的信息:

在這裏插入圖片描述

  1. 分析網頁,我們得到電臺名稱元素的位置:div 下面的ul 下面的li標籤下的a 標籤;

在這裏插入圖片描述

  1. 進入每個電臺提取mp3的音頻源的地址,但是我們查看網頁源碼發現,音頻是通過js異步加載的。所以我們要怎麼破這個js成爲了我們的關鍵;

在這裏插入圖片描述

我們一步一步抽絲剝繭:
我們通過抓包對比發現,stream_qtid的值是變化,那我們可以把stream_qtid設置成變量,再提取到stream_qtid的值拼接上https://lhttp.qingting.fm/live/stream_qyid/64k.mp3

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
好了,既然思路有了,也找到解決的方法了,那接下來我們怎麼解析這js呢?

在這裏插入圖片描述

分析請求頭中我們可以發現URL地址中的最後一個值與我們前面抓取到每個省市電臺名稱時的URL中最後的值是一樣,(因爲這個頁面是從上一個頁面過來的。)
找到了URL的規律,那麼下面我們來解字符串:
在這裏插入圖片描述

在這裏插入圖片描述

代碼中:entry_script[3]從上圖可以看出我們要解析的JavaScript代碼是在位置3;
Get_text()[31:57]這段代碼表示我們要從JavaScript
/* <![CDATA[ */ var wnd_api ={"api_nonce":"90dae87b12"}; /* ]]> /的代碼中提取出請求頭{“api_nonce”:“90dae87b12”};的位置,注意 / <![CDATA最前面有空格!!!

在這裏插入圖片描述
接下來我們把URL拼接然後把解析出來的數據放進header請求頭中發起請求:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
萬一遇到電臺沒有音頻直播怎麼辦呢?這個時候我們就需要做一個異常的處理!
最後拼接音頻源URL地址

在這裏插入圖片描述

最後來成功的圖片!(注意存儲數據的類型!)

在這裏插入圖片描述
評論+關注,源碼奉上!

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