靜態網頁
靜態網頁是指網頁中沒有程序代碼,只有HTML,一般后綴為.html,.htm,或者.xml等。靜態網頁的頁面一旦做成,內容就不會再改變。因為這些網頁內容是保存在網站服務器上的,如果要修改內容,則必須修改網頁源代碼,再重新上傳到網站服務器。
動態網頁的網頁文件中,除了有HTML外,還有一些特定功能的程序代碼。通過這些代碼網頁數據爬取工具,瀏覽器跟服務器可以交互,即服務器可以根據瀏覽器的請求生成網頁內容。通俗的說就是,當我們打開動態網頁時,服務器不會一次性返回所有頁面內容,我們需要哪些內容,通過瀏覽器與服務器交互,服務器再返回對應的內容。這種加載數據的方式稱為API加載數據。API( )即應用程序編程接口,也就是網頁和服務器交互的途徑。
正是因為服務器不會一次性返回所有頁面內容,所以很多數據并不在網頁源代碼中網頁數據爬取工具,因此也就不能用進行解析和提取(提取結果為空)。這時我們就需要使用動態網頁爬蟲。
抓取動態頁面一般有兩種常用方法:(1)、通過逆向工程獲取動態數據接口(真實的訪問路徑)——通過API爬取數據。(2)、利用庫模擬真實瀏覽器,獲取渲染后的內容。
今天主要介紹第一種——通過API爬取數據。以爬取今日頭條熱榜為例。
第一步:找到數據的藏身之所
打開今日頭條,頭條熱榜內容如下(只顯示一頁,共有5頁,共計50條內容):
打開網頁開發者工具,找到里面的面板,找到里面的XHR,我們需要的內容就在這里面。面板里有很多請求信息,如下圖:
雙擊請求信息可以會彈出一個小界面,里面包含有、、等信息。在里面可以一層一層地查看數據,如下圖:
里的可以看到發起請求的鏈接( URL)、請求方式( )、以及狀態碼(),如下圖:
第二步:代碼實現
完整代碼如下圖:
#導入所需模塊
from bs4
#傳入請求頭里的信息,將爬蟲偽裝成瀏覽器
= {
'User-Agent': '/5.0 ( NT 6.1; Win64; x64) /537.36 (KHTML, like Gecko) /94.0.4606.71 /537.36',
'': '/?wid=28'
}
#將API鏈接的查詢字符串傳給參數(為了使URL看起來更整潔)
= {
'':'',
'':'..-X5-'
}
res = .get('/hot-event/hot-board/',=,=)
#返回結果為JSON格式,調用json()方法解析
items = res.json()
num = [i for i in range(len(items['data']))]
for x in num:
print(items['data'][x]['Title'])
結果如下圖(僅顯示一部分):