天天看點

動态資料采集

動态加載

  • 需求:爬取豆瓣網中的電影詳情資料,
  • 分析網站:
    • 當滾輪滑動到底部的時候,頁面會發起ajax請求,且請求到一組電影詳情資料。
    • 當滾輪不滑動的時候,頁面顯示的電影資料,通過對浏覽器位址欄的url發起請求是請求不到的。
  • 動态加載的資料
    • 可見非即可得
    • 概念:通過非浏覽器位址欄url請求到的資料(另外的一個新的請求請求到的資料)
    • 當我們對一個陌生的網站進行指定資料爬取之前,我們在寫代碼之前必須要做的一個事情就是校驗你想要爬取的資料是否為動态加載的資料
      • 是動态加載的資料
        • 基于抓包工具進行全局搜尋,鎖定動态加載資料對應的資料包即可。從資料包中提取請求的url和請求方式和請求參數。
      • 不是動态加載的資料
        • 直接對位址欄的url發起請求就可以擷取指定資料
import requests

url = 'https://movie.douban.com/j/chart/top_list'
#參數動态化
params = {
    "type": "17",
    "interval_id": "100:90",
    "action": "",
    "start": "20",
    "limit": "10",
}
response = requests.get(url=url,headers=headers,params=params)
page_text = response.json() #json傳回的是序列号好的對象
#将電影名稱和評分進行解析
for dic in page_text:
    name = dic['title']
    score = dic['score']
    print(name+':'+score)           
  • 問題:如何檢測頁面中的資料是否為動态加載的資料?
    • 基于抓包工具進行局部搜尋
      • 搜尋到:不是動态加載資料
      • 搜尋不到:是動态加載資料
  • 肯德基餐廳查詢: http://www.kfc.com.cn/kfccda/storelist/index.aspx
  • 分析:
    • 資料為動态加載資料
    • 通過抓包工具的全局搜尋捕獲動态加載資料
import requests

url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
data = {
    "cname": "",
    "pid": "",
    "keyword": "北京",
    "pageIndex": "1",
    "pageSize": "10",
}
#參數:data是用來實作參數動态化,等同于get方法中的params參數的作用
response = requests.post(url=url,headers=headers,data=data)
page_text = response.json()
for dic in page_text['Table1']:
    pos = dic['addressDetail']
    print(pos)           
 import requests

#想要擷取所有頁碼對應的位置資訊
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
for pageNum in range(1,8):
    data = {
        "cname": "",
        "pid": "",
        "keyword": "北京",
        "pageIndex": str(pageNum),
        "pageSize": "10",
    }
    #參數:data是用來實作參數動态化,等同于get方法中的params參數的作用
    response = requests.post(url=url,headers=headers,data=data)
    page_text = response.json()
    for dic in page_text['Table1']:
        pos = dic['addressDetail']
        print(pos)           

繼續閱讀