Python如何爬取動態網頁數據

1.引言

  說到爬網頁,我們一般的操作是先查看源代碼或者審查元素,找到信息所在節點,然後用 beautifulsoup/xpth/re 來獲取數據,這是我們對付靜態網頁的常用手段。
  但大家也知道,現在的網頁大多都是動態的了,即數據是通過js渲染加載的,對付靜態網頁那一套在這根本不討好,所以,掌握爬取動態加載數據的方法就顯得十分必要了。
  下面以爬取中國電影網中國票房排行前500爲例講解下獲取動態數據的一般步驟。

2.實例與步驟

2.1首先打開數據頁面,右鍵選擇審查元素,然後選擇Network——>XHR,可以看到,現在裏面什麼都沒有。
這裏寫圖片描述

2.2然後點擊瀏覽器的刷新按鈕或者按F5刷新頁面,可以看到,有一條數據出現了,這個鏈接就是獲取數據的頁面API,選擇Response,可以看到,它是以Json格式返回的數據,我們需要的信息都在裏面。
這裏寫圖片描述

2.3點擊頁面上的下一頁,多獲取幾條數據,以便找到它們之間的聯繫。
這裏寫圖片描述
可以看到,圖上的幾條數據鏈接只有最後的頁碼不同,簡直不要太友好!複製一條鏈接保存,用作代碼模擬參考。

2.4知道了數據鏈接間的關係,我們就可以在代碼裏面模擬了。比如我們要獲取前50頁的信息,那就可以這樣寫。

  for i in range(1, 51, 1):
        src = 'http://www.cbooo.cn/Mdata/getMdata_movie?area=50&type=0&year=0&initial=%E5%85%A8%E9%83%A8&pIndex=' + str(i)
        getHtml(src)

2.5通過以上操作我們得到了返回的數據,但返回的是Json格式的數據,所以我們需要對它進行解析,然後從中得到每部電影的ID(可以發現,每部電影的鏈接都是這種格式:http://www.cbooo.cn/m/641515,後面的數字是電影的ID,這是我們需要從返回的Json數據裏得到的東西。),得到ID後,組成電影鏈接,之後就是靜態頁面的操作了。

import requests
import json
def getHtml(src):
    html = requests.get(src).content.decode('utf-8')
    for con in json.loads(html)['pData']:
        url = 'http://www.cbooo.cn/m/' + str(con['ID'])
        newhtml = requests.get(url).content.decode('utf-8')

3.總結

  獲取動態數據的關鍵是找到“頁面獲取數據的API”,然後找到這種數據鏈接間的關係,之後對返回的數據進行解析,從中得到需要的數據。

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