最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何爬取通過ajax加載數(shù)據(jù)的網(wǎng)站

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

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

請看下面的代碼:

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)

上面的代碼是爬取今日頭條的一個網(wǎng)頁,并打印出get方法返回的文本內(nèi)容如下圖所示,值現(xiàn)在一堆網(wǎng)頁代碼,并沒有相關(guān)的頭條新聞信息

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

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

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

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

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

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

為了防止爬蟲被封,每次請求時要把請求時都要傳遞請求頭信息,請求頭信息中包含了瀏覽器的信息,如果請求沒有瀏覽器信息,就認為是網(wǎng)絡(luò)爬蟲,直接拒絕訪問。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請求要傳遞的參數(shù)
  parm = {
    'offset': offset,
    'format': 'json',
    'keyword': '美女',
    'autoload': 'true',
    'count': 20,
    'cur_tab': 1,
    'from': 'search_tab',
    'pd': 'synthesis'
  }
  #構(gòu)造ajax請求url
  ajax_url = url + urlencode(parm)
  #調(diào)用ajax請求
  response = requests.get(ajax_url, headers=headers)
  #ajax請求返回的是json數(shù)據(jù),通過調(diào)用json()方法得到j(luò)son數(shù)據(jù)
  json = response.json()
  data = json.get('data')
  for item in data:
    if item.get('title') is not None:
      print(item.get('title'))

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

if __name__ == '__main__':
  main()

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python編碼類型轉(zhuǎn)換方法詳解

    Python編碼類型轉(zhuǎn)換方法詳解

    這篇文章主要介紹了Python編碼類型轉(zhuǎn)換方法,結(jié)合實例形式詳細分析了Python針對各種常見編碼的轉(zhuǎn)碼與解碼等操作技巧,需要的朋友可以參考下
    2016-07-07
  • pythotn條件分支與循環(huán)詳解(2)

    pythotn條件分支與循環(huán)詳解(2)

    這篇文章主要介紹了Python條件分支和循環(huán)用法,結(jié)合實例形式較為詳細的分析了Python邏輯運算操作符,條件分支語句,循環(huán)語句等功能與基本用法,需要的朋友可以參考下
    2021-08-08
  • 使用Python實現(xiàn)簡單的微信控制操作

    使用Python實現(xiàn)簡單的微信控制操作

    這篇文章主要為大家詳細介紹了如何通過Python去調(diào)用Windows API實現(xiàn)模擬人工操作的方式去實現(xiàn)控制微信電腦版,感興趣的小伙伴可以參考一下
    2025-01-01
  • Python繪圖庫Matplotlib的基本用法

    Python繪圖庫Matplotlib的基本用法

    這篇文章主要介紹了Python繪圖庫Matplotlib的基本用法,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • 一步步教你用Python畫五彩氣球

    一步步教你用Python畫五彩氣球

    這篇文章主要給大家介紹了關(guān)于如何用Python畫五彩氣球的相關(guān)資料,主要是用turtle庫自帶的畫筆turtle.Turtle()來繪制氣球,文中給出了詳細的實例代碼,需要的朋友可以參考下
    2023-06-06
  • Python?的counter()函數(shù)解析與示例詳解

    Python?的counter()函數(shù)解析與示例詳解

    在?Python?中,?collections?模塊提供了?Counter?類,用于計算可迭代對象中元素的數(shù)量,?Counter?是一個字典的子類,它以元素作為鍵,以元素出現(xiàn)的次數(shù)作為值進行計數(shù),本文給大家介紹Python?的counter()函數(shù),感興趣的朋友一起看看吧
    2023-08-08
  • 詳解python基礎(chǔ)中的for循環(huán)

    詳解python基礎(chǔ)中的for循環(huán)

    這篇文章主要為大家介紹了python的for循環(huán),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python中字典和列表的相互嵌套問題詳解

    python中字典和列表的相互嵌套問題詳解

    這篇文章主要為大家詳細介紹了python中字典和列表相互嵌套的問題,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • python3 selenium自動化 frame表單嵌套的切換方法

    python3 selenium自動化 frame表單嵌套的切換方法

    今天小編就為大家分享一篇python3 selenium自動化 frame表單嵌套的切換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python如何寫入dbf文件內(nèi)容及創(chuàng)建dbf文件

    python如何寫入dbf文件內(nèi)容及創(chuàng)建dbf文件

    這篇文章主要介紹了python如何寫入dbf文件內(nèi)容及創(chuàng)建dbf文件,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

神木县| 本溪市| 融水| 德昌县| 抚远县| 商水县| 凉山| 峨边| 若羌县| 屏边| 浑源县| 嘉兴市| 应城市| 石首市| 长沙县| 宜黄县| 淮滨县| 榕江县| 洱源县| 新宁县| 同江市| 达日县| 阳朔县| 修文县| 福建省| 阳信县| 鄂尔多斯市| 永州市| 天等县| 北安市| 包头市| 县级市| 兰州市| 临颍县| 兴隆县| 永城市| 宁津县| 布拖县| 隆尧县| 綦江县| 怀柔区|