溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù)

發(fā)布時間:2021-12-21 10:18:28 來源:億速云 閱讀:259 作者:柒染 欄目:大數(shù)據(jù)

不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù),針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

下面講的是不使用selenium插件模擬瀏覽器,如何獲得網(wǎng)頁上的動態(tài)加載數(shù)據(jù)。

步驟如下: 

一、找到正確的URL。

二、填寫URL對應(yīng)的參數(shù)。

三、參數(shù)轉(zhuǎn)化為urllib可識別的字符串data。

四、初始化Request對象。

五、urlopen這個Request對象,獲得數(shù)據(jù)。

url='http://www.*****.*****/*********'
formdata = {'year': year,
'month': month,
'day': day
}
data = urllib.urlencode(formdata)
request=urllib2.Request(url,data = data)  #如果URL不帶參數(shù)就是request=urllib2.Request(url)
r = urllib2.urlopen(request)
html=r.read() # html就是你要的數(shù)據(jù),可能是html格式,也可能是json,或去他格式

后面步驟都是相同的,關(guān)鍵在于如何獲得URL和參數(shù)。我們以新冠肺炎的疫情統(tǒng)計網(wǎng)頁為例(https://news.qq.com/zt2020/page/feiyan.htm#/)。

不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù)

如果直接抓瀏覽器的網(wǎng)址,你會看見一個沒有數(shù)據(jù)內(nèi)容的html,里面只有標(biāo)題、欄目名稱之類的,沒有累計確診、累計死亡等等的數(shù)據(jù)。因為這個頁面的數(shù)據(jù)是動態(tài)加載上去的,不是靜態(tài)的html頁面。需要按照我上面寫的步驟來獲取數(shù)據(jù),關(guān)鍵是獲得URL和對應(yīng)參數(shù)formdata。下面以火狐瀏覽器講講如何獲得這兩個數(shù)據(jù)。

肺炎頁面右鍵,出現(xiàn)的菜單選擇檢查元素。

不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù)

點擊上圖紅色箭頭網(wǎng)絡(luò)選項,然后刷新頁面。如下,

不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù)

這里會出現(xiàn)很多網(wǎng)絡(luò)傳輸記錄,觀察最右側(cè)紅框“大小”那列,這列表示這個http請求傳輸?shù)臄?shù)據(jù)量大小,動態(tài)加載的數(shù)據(jù)一般數(shù)據(jù)量會比其它頁面元素的傳輸大,119kb相比其它按字節(jié)計算的算是很大的數(shù)據(jù)了,當(dāng)然網(wǎng)頁的裝飾圖片有的也很大,這個需要按照文件類型那列來甄別。

然后點擊域名列對應(yīng)那行,如下

不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù)

可以在消息頭中看見請求網(wǎng)址,這個就是url,點擊參數(shù)可以看見url對應(yīng)的參數(shù)

不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù)

https://view.inews.qq.com/g2/getOnsInfo?name=disease_h6&callback=jQuery341004532487105727312_1584498763134&_=1584498763135

可以看到url的尾部?后面已經(jīng)把參數(shù)寫上了。

我們?nèi)绻褂脦?shù)的URL,那么就

request=urllib2.Request(url),不加data參數(shù)。

如果使用request=urllib2.Request(url,data = data)

那么url="https://view.inews.qq.com/g2/getOnsInfo"

formdata = {'name': 'disease_h6',

'callback': '',

'_': 當(dāng)前時間戳

}

name是disease_h6,callback是頁面回調(diào)函數(shù),我們不需要有回調(diào)動作,所以設(shè)置為空,_對應(yīng)的是時間戳(Python很容易獲得時間戳的),因為查詢肺炎患者數(shù)量和時間是緊密相關(guān)的。

如果都寫在一個url中是下面形式的

url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h6&callback=&_=%d'%int(stamp*1000)

按照這個思路就可以獲得疫情數(shù)據(jù)了。兩種方案任你選擇。

找url和參數(shù)是一項需要耐心,需要一定的分析能力的,才能正確甄別url和參數(shù)的含義,進行正確的編程實現(xiàn)。參數(shù)是否可以空,是否可以硬編碼寫死,是否有特殊要求,其實是一個很考驗經(jīng)驗的事情。

有的url很簡單,返回一個.dat文件,里面直接就是json格式的數(shù)據(jù),這種是最友好的了。有的需要你設(shè)置大量參數(shù),才能獲得,而且獲得的是html格式的,需要解析才能提取數(shù)據(jù)。

關(guān)于不使用selenium插件如何抓取網(wǎng)頁的動態(tài)加載數(shù)據(jù)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI