亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何爬取通過ajax加載數據的網站

 更新時間:2019年08月15日 09:53:26   作者:Summer哥  
這篇文章主要介紹了如何爬取通過ajax加載數據的網站,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

目前很多網站都使用ajax技術動態(tài)加載數據,和常規(guī)的網站不一樣,數據時動態(tài)加載的,如果我們使用常規(guī)的方法爬取網頁,得到的只是一堆html代碼,沒有任何的數據。

請看下面的代碼:

url = 'https://www.toutiao.com/search/?keyword=美女'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"}

response = requests.get(url,headers=headers)
print(response.text)

上面的代碼是爬取今日頭條的一個網頁,并打印出get方法返回的文本內容如下圖所示,值現在一堆網頁代碼,并沒有相關的頭條新聞信息

內容過多,只截取部分內容,有興趣的朋友可以執(zhí)行上面的代碼看下效果。

對于使用ajax動態(tài)加載數據的網頁要怎么爬取呢?我們先看下近日頭條是如何使用ajax加載數據的。通過chrome的開發(fā)者工具來看數據加載過程。

首先打開chrome瀏覽器,打開開發(fā)者工具,點擊Network選項,點擊XHR選項,然后輸入網址:https://www.toutiao.com/search/?keyword=美女  ,點擊Preview選項卡,就會看到通過ajax請求返回的數據,Name那一欄就是ajax請求,當鼠標向下滑動時,就會出現多條ajax請求:

通過上圖我們知道ajax請求返回的是json數據,我們繼續(xù)分析ajax請求返回的json數據,點擊data展開數據,接著點擊0展開數據,發(fā)現有個title字段,內容剛好和網頁的第一條數據匹配,可知這就是我們要爬取的數據。如下所示:

鼠標向下滾動到網頁底部時就會觸發(fā)一次ajax請求,下面是三次ajax請求:

觀察每個ajax請求,發(fā)現每個ajax請求都有offset,format,keyword,autoload,count,cur_tab,from,pd參數,除了offset參數有變化之外,其他的都不變化。每次ajax請求offset的參數變化規(guī)律是0,20,40,60…,可以推測offset是偏移量,count參數是一次ajax請求返回數據的條數。

為了防止爬蟲被封,每次請求時要把請求時都要傳遞請求頭信息,請求頭信息中包含了瀏覽器的信息,如果請求沒有瀏覽器信息,就認為是網絡爬蟲,直接拒絕訪問。request header信息如下:

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0",
"referer": "https://www.toutiao.com/search/?keyword=%E7%BE%8E%E5%A5%B3",
'x-requested-with': 'XMLHttpRequest'
}

完整代碼如下:

import requests
from urllib.parse import urlencode

def parse_ajax_web(offset):
  url = 'https://www.toutiao.com/search_content/?'
  #請求頭信息
  headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0",
    "referer": "https://www.toutiao.com/search/",
    'x-requested-with': 'XMLHttpRequest'
  }
  #每個ajax請求要傳遞的參數
  parm = {
    'offset': offset,
    'format': 'json',
    'keyword': '美女',
    'autoload': 'true',
    'count': 20,
    'cur_tab': 1,
    'from': 'search_tab',
    'pd': 'synthesis'
  }
  #構造ajax請求url
  ajax_url = url + urlencode(parm)
  #調用ajax請求
  response = requests.get(ajax_url, headers=headers)
  #ajax請求返回的是json數據,通過調用json()方法得到json數據
  json = response.json()
  data = json.get('data')
  for item in data:
    if item.get('title') is not None:
      print(item.get('title'))

def main():
  #調用ajax的次數,這里調用5次。
  for offset in (range(0,5)):
    parse_ajax_web(offset*20)

if __name__ == '__main__':
  main()

上面是爬取通過ajax請求加載數據網站的例子,如果想要其他的數據,可以動手自己寫,這里只是搭了一個架子,各位可以嘗試將數據寫入到excel或者數據庫中。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python中np.percentile和df.quantile分位數詳解

    Python中np.percentile和df.quantile分位數詳解

    分位數(Quantile)亦稱分位點是指將一個隨機變量的概率分布范圍分為幾個等份的數值點,下面這篇文章主要給大家介紹了關于Python中np.percentile和df.quantile分位數的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • python編譯安裝參數方式

    python編譯安裝參數方式

    這篇文章主要介紹了python編譯安裝參數方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python標準庫shutil用法實例詳解

    Python標準庫shutil用法實例詳解

    這篇文章主要介紹了Python標準庫shutil用法,結合實例形式分析了shutil庫針對文件與文件夾各種常見操作技巧與相關使用注意事項,需要的朋友可以參考下
    2018-08-08
  • python使用knn實現特征向量分類

    python使用knn實現特征向量分類

    這篇文章主要為大家詳細介紹了python使用knn實現特征向量分類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • python elasticsearch從創(chuàng)建索引到寫入數據的全過程

    python elasticsearch從創(chuàng)建索引到寫入數據的全過程

    這篇文章主要介紹了python elasticsearch從創(chuàng)建索引到寫入數據的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • python如何使用pywebview打造一個現代化的可視化GUI界面詳解

    python如何使用pywebview打造一個現代化的可視化GUI界面詳解

    pywebview是一個輕量級的跨平臺庫,它可以讓你在Python程序中嵌入一個瀏覽器窗口,下面這篇文章主要給大家介紹了關于python如何使用pywebview打造一個現代化的可視化GUI界面的相關資料,需要的朋友可以參考下
    2024-07-07
  • 解決python3 json數據包含中文的讀寫問題

    解決python3 json數據包含中文的讀寫問題

    今天小編就為大家分享一篇解決python3 json數據包含中文的讀寫問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python類的基礎入門知識

    Python類的基礎入門知識

    關于類的定義
    2008-11-11
  • python生成多個只含0,1元素的隨機數組或列表的實例

    python生成多個只含0,1元素的隨機數組或列表的實例

    今天小編就為大家分享一篇python生成多個只含0,1元素的隨機數組或列表的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python中reduce()函數的語法參數與作用詳解

    Python中reduce()函數的語法參數與作用詳解

    這篇文章主要介紹了Python中reduce()函數的語法參數與作用詳解,reduce函數是通過函數對迭代器對象中的元素進行遍歷操作,Python3.x中reduce函數已經從內置函數中取消了,轉而放在functools模塊中,需要的朋友可以參考下
    2023-08-08

最新評論