1. 程式人生 > 程式設計 >淺談如何使用python抓取網頁中的動態資料實現

淺談如何使用python抓取網頁中的動態資料實現

我們經常會發現網頁中的許多資料並不是寫死在HTML中的,而是通過js動態載入的。所以也就引出了什麼是動態資料的概念,動態資料在這裡指的是網頁中由Javascript動態生成的頁面內容,是在頁面載入到瀏覽器後動態生成的,而之前並沒有的。

在編寫爬蟲進行網頁資料抓取的時候,經常會遇到這種需要動態載入資料的HTML網頁,如果還是直接從網頁上抓取那麼將無法獲得任何資料。

今天,我們就在這裡簡單聊一聊如何用python來抓取頁面中的JS動態載入的資料。

給出一個網頁:豆瓣電影排行榜,其中的所有電影資訊都是動態載入的。我們無法直接從頁面中獲得每個電影的資訊。

如下圖所示,我們無法在HTML中找到對應的電影資訊。

淺談如何使用python抓取網頁中的動態資料實現

淺談如何使用python抓取網頁中的動態資料實現

在Chrome瀏覽器中,點選F12,開啟Network中的XHR,我們來抓取對應的js檔案來進行解析。如下圖:

淺談如何使用python抓取網頁中的動態資料實現

在豆瓣頁面向下拖拽,使得頁面載入入更多的電影資訊,從而我們可以抓取對應的報文。

我們可以看到它採用的是AJAX非同步請求。通過在後臺與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新。因此就可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新,從而實現資料的動態載入。

淺談如何使用python抓取網頁中的動態資料實現

我們可以看到,通過GET,我們得到的response之中包含了所對應的電影相關資訊,它們以JSON的格式儲存在一起。

淺談如何使用python抓取網頁中的動態資料實現

檢視一下RequestURL資訊,我們可以發現在action引數之後又跟了兩個引數"start"和"limit",很顯然它們的意思是:"從某個位置開始返回的電影的個數"。

如果想快速獲取相關的電影資訊,就可以直接把這個URL複製進位址列,修改你所需要的start和limit引數值,將得到對應的結果進行抓取即可。

但是這樣顯得很不自動化,而且很多其他網站的RequestURL並不給的這麼直接,所以我們接下來用python進行進一步的操作來獲取這個返回的報文資訊。

#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

因為豆瓣是https的,所以我們在此處需要稍微注意一下,將verify置為False表示不需要驗證SSL證書。

我們可以發現打印出的結果中就是對應的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":["美國"],"title":"肖申克的救贖","url":"https:\/\/movie.douban.com\/subject\/1292052\/","release_date":"1994-09-10","actor_count":15,"vote_count":713205,"score":"9.6","actors":["蒂姆·羅賓斯","摩根·弗里曼","鮑勃·岡頓","威廉姆·賽德勒","克蘭西·布朗","吉爾·貝羅斯","馬克·羅斯頓","詹姆斯·惠特摩","傑弗裡·德曼","拉里·布蘭登伯格","尼爾·吉恩託利","布賴恩·利比","大衛·普羅瓦爾","約瑟夫·勞格諾","祖德·塞克利拉"],"is_watched":false}]

到此這篇關於淺談如何使用python抓取網頁中的動態資料實現的文章就介紹到這了,更多相關python抓取網頁動態資料 內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!