我們在使用python爬取網頁數據的時候,會遇到頁面的數據是通過js腳本動態加載的情況,這時候我們就得模擬接口請求信息,根據接口返回結果來獲取我們想要的數據。
以某電影網站為例:我們要獲取到電影名稱以及對應的評分

首先我們通過開發者模式,找到請求該頁面的接口信息

另外,為了能模擬瀏覽器訪問接口信息,我們需要獲取到請求頭部信息

獲取到以上信息,我們就可以通過python的requests庫來模擬訪問接口啦
1、導入requests庫
import requests
2、定義請求參數信息
url = "https://movie.douban.com/j/search_subjects"
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0",
}
param = {"type": "movie", "tag": "最新", "sort": "recommend", "page_limit": "20", "page_start": "0"}
3、獲取請求的json對象
ret = requests.get(url, params=param, headers=header)
js = ret.json()
print(js)
4、根據翻頁信息,我們知道"page_start"這個參數是每20遞增一次的,可以通過定義變量使用for 循環來自動獲取下一頁信息,我們可以對以上代碼進行優化。另外,為了防止請求過快,被當成惡意攻擊,我們可以導入time模塊,每次請求間隔2-3s
count = 0
for i in range(3):
param = {"type": "movie", "tag": "最新", "sort": "recommend", "page_limit": "20", "page_start": count}
time.sleep(random.uniform(2, 3))
ret = requests.get(url, params=param, headers=header)
js = ret.json()
for info in js["subjects"]:
rate, title = info["rate"], info["title"]
print(f"《{title}》的評分是:{rate}")
count += 20
這樣我們就獲取到想要的數據,不用挨個copy啦。我們可以把獲取的數據寫入到文件里永久保存,並進行整理。下次再分享

