溫馨提示×

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

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

使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法

發(fā)布時(shí)間:2020-08-18 11:51:52 來(lái)源:億速云 閱讀:347 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

我們經(jīng)常會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)中的許多數(shù)據(jù)并不是寫死在HTML中的,而是通過(guò)js動(dòng)態(tài)載入的。所以也就引出了什么是動(dòng)態(tài)數(shù)據(jù)的概念,動(dòng)態(tài)數(shù)據(jù)在這里指的是網(wǎng)頁(yè)中由Javascript動(dòng)態(tài)生成的頁(yè)面內(nèi)容,是在頁(yè)面加載到瀏覽器后動(dòng)態(tài)生成的,而之前并沒(méi)有的。

在編寫爬蟲(chóng)進(jìn)行網(wǎng)頁(yè)數(shù)據(jù)抓取的時(shí)候,經(jīng)常會(huì)遇到這種需要?jiǎng)討B(tài)加載數(shù)據(jù)的HTML網(wǎng)頁(yè),如果還是直接從網(wǎng)頁(yè)上抓取那么將無(wú)法獲得任何數(shù)據(jù)。

今天,我們就在這里簡(jiǎn)單聊一聊如何用python來(lái)抓取頁(yè)面中的JS動(dòng)態(tài)加載的數(shù)據(jù)。

給出一個(gè)網(wǎng)頁(yè):豆瓣電影排行榜,其中的所有電影信息都是動(dòng)態(tài)加載的。我們無(wú)法直接從頁(yè)面中獲得每個(gè)電影的信息。

如下圖所示,我們無(wú)法在HTML中找到對(duì)應(yīng)的電影信息。

使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法

使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法

在Chrome瀏覽器中,點(diǎn)擊F12,打開(kāi)Network中的XHR,我們來(lái)抓取對(duì)應(yīng)的js文件來(lái)進(jìn)行解析。如下圖:

使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法

在豆瓣頁(yè)面向下拖拽,使得頁(yè)面加載入更多的電影信息,從而我們可以抓取對(duì)應(yīng)的報(bào)文。

我們可以看到它采用的是AJAX異步請(qǐng)求。通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。因此就可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新,從而實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)載入。

使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法

我們可以看到,通過(guò)GET,我們得到的response之中包含了所對(duì)應(yīng)的電影相關(guān)信息,它們以JSON的格式保存在一起。

使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法

查看一下RequestURL信息,我們可以發(fā)現(xiàn)在action參數(shù)之后又跟了兩個(gè)參數(shù)"start"和"limit",很顯然它們的意思是:"從某個(gè)位置開(kāi)始返回的電影的個(gè)數(shù)"。

如果想快速獲取相關(guān)的電影信息,就可以直接把這個(gè)URL復(fù)制進(jìn)地址欄,修改你所需要的start和limit參數(shù)值,將得到對(duì)應(yīng)的結(jié)果進(jìn)行抓取即可。

但是這樣顯得很不自動(dòng)化,而且很多其他網(wǎng)站的RequestURL并不給的這么直接,所以我們接下來(lái)用python進(jìn)行進(jìn)一步的操作來(lái)獲取這個(gè)返回的報(bào)文信息。

#coding:utf-8
import urllib
import requests

post_param = {'action':'','start':'0','limit':'1'}
return_data = requests.get("https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90",data =post_param, verify = False)
print return_data.text

因?yàn)槎拱晔莌ttps的,所以我們?cè)诖颂幮枰晕⒆⒁庖幌?,將verify置為False表示不需要驗(yàn)證SSL證書

我們可以發(fā)現(xiàn)打印出的結(jié)果中就是對(duì)應(yīng)的JSON文件,下一步的解析和操作在這里就不贅述了。

[{"rating":["9.6","50"],"rank":1,"cover_url":"https://img3.doubanio.com\/view\/movie_poster_cover\/mpst\/public\/p480747492.jpg","is_playable":true,"id":"1292052","types":["犯罪","劇情"],"regions":["美國(guó)"],"title":"肖申克的救贖","url":"https:\/\/movie.douban.com\/subject\/1292052\/","release_date":"1994-09-10","actor_count":15,"vote_count":713205,"score":"9.6","actors":["蒂姆·羅賓斯","摩根·弗里曼","鮑勃·岡頓","威廉姆·賽德勒","克蘭西·布朗","吉爾·貝羅斯","馬克·羅斯頓","詹姆斯·惠特摩","杰弗里·德曼","拉里·布蘭登伯格","尼爾·吉恩托利","布賴恩·利比","大衛(wèi)·普羅瓦爾","約瑟夫·勞格諾","祖德·塞克利拉"],"is_watched":false}]

感謝各位的閱讀!關(guān)于使用python抓取網(wǎng)頁(yè)中動(dòng)態(tài)數(shù)據(jù)的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

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

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

AI