---恢復內容開始---
下面記錄如何抓取ajax形式加載的網頁數據:
目標:獲取“https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=”下的網頁數據
第一步:網頁數據分析-----》特點:當列表條滾動到頁面下方時數據自動加載,而頁面的url並未發生變化
第二步:利用Fiddler抓包,如下圖:
圖一:請求數據
圖二:form表單
通過抓包獲取到數據規律:圖二from表單中start對應數據和圖一中的url中start對應數據隨着每次加載而遞增,其他數據未發生變化。對應這種規律我們便可構造相應請求獲取數據
需注意,數據形式為json
代碼如下:
1).urllib形式
import urllib2 import urllib #此處的url為上述抓包獲取的url去掉start以及limit,start以及limit數據后邊以form表單的形式傳入 url = ' https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=' #請求投信息,偽造成瀏覽器,方式被反爬蟲策略攔截 headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"} #構建form表單 formdata = { "start":"20", "limit":"20" } #urlencode()urllib中的函數,作用:將key:value形式的鍵值對轉換為"key=value"形式的字符串 data = urllib.urlencode(formdata) #構建request實例對象 request = urllib2.Request(url,data=data,headers=headers) #發送請求並返回響應信息 response = urllib2.urlopen(request) #注意此處的數據形式並不是html文檔,而是json數據 json = response.read() print html
2).request庫的get請求代碼
#coding=utf-8 import requests url = ' https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=' headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"} data = { "start":"20", "limit":"20", } response = requests.get(url,params = data,headers = headers) print response.text
3).request庫的post請求
#coding=utf-8 import requests url = ' https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=' formdata = { "start":"20", "limit":"20" } headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"} response = requests.post(url,data=formdata,headers=headers) print response.text
---恢復內容結束---