日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python爬虫学习笔记12】Ajax数据爬取简介

發(fā)布時(shí)間:2025/3/8 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python爬虫学习笔记12】Ajax数据爬取简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有時(shí)候在我們設(shè)計(jì)利用requests抓取網(wǎng)頁數(shù)據(jù)的時(shí)候,會發(fā)現(xiàn)所獲得的結(jié)果可能與瀏覽器顯示給我們的不一樣:比如說有的信息我們通過瀏覽器可以顯示,但一旦用requests卻得不到想要的結(jié)果。這種現(xiàn)象是因?yàn)槲覀兺ㄟ^requests獲得的都是HTML源文檔,而瀏覽器中見到的頁面數(shù)據(jù)都是經(jīng)過JavaScript處理的,而這些處理的數(shù)據(jù)可能是通過Ajax加載、本身包含于HTML中或是經(jīng)過JavaScript自動生成。

由Web發(fā)展趨勢來看,越來越多的網(wǎng)頁都通過Ajax加載來呈現(xiàn),即網(wǎng)頁數(shù)據(jù)加載是一種異步加載方式,網(wǎng)頁本身不包含數(shù)據(jù),而是在初始化網(wǎng)頁后自動地通過向服務(wù)器發(fā)送Ajax請求,然后從服務(wù)器獲取相應(yīng)數(shù)據(jù)之后在渲染到網(wǎng)頁上。本節(jié)下面將重點(diǎn)介紹Ajax的相關(guān)概念和如何判斷和獲取是否由Ajax請求,并在后面介紹爬取Ajax數(shù)據(jù)的兩種基本方法。

Ajax簡介

Ajax(全稱Asynchronous JavaScript and XML,異步的JavaScript 和 XML),是一種利用JavaScript在保證頁面不被刷新、頁面鏈接不改變的情況下與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁的技術(shù)。使用Ajax的示例有很多,比如說新浪微博和不凡商業(yè)的查看更多等。

Ajax分析

初步了解Ajax后,我們便可以知道其加載過程主要分為三個(gè)步驟:發(fā)送請求——解析內(nèi)容——渲染頁面。那么,我們又是如何判斷頁面是通過發(fā)送Ajax請求來動態(tài)加載的,又如何確定其請求的地址呢?

其實(shí),判斷一個(gè)頁面是否為Ajax請求加載,我們可以借助Chrome瀏覽器的工具欄。以不凡商業(yè)網(wǎng)站為例,我們先調(diào)出Chrome瀏覽器的Network工具欄,選擇XHR進(jìn)行過濾(其實(shí)這一個(gè)就是代表請求的類型,也就是Ajax的請求類型),再刷新頁面便可看到當(dāng)前所有的Ajax請求了。

接著我們下拉到網(wǎng)頁底部并試著點(diǎn)擊查看更多,就會發(fā)現(xiàn)請求列表中多了一個(gè)請求,如圖所示,我們再試著點(diǎn)擊多次,又會有更多新的請求,因此我們也就可以確定這是通過Ajax來加載的。

由此,我們便可以通過分析每一個(gè)請求的請求頭具體內(nèi)容來獲取數(shù)據(jù)源。如上圖中的Request URL里的內(nèi)容就是剛剛加載的數(shù)據(jù)的來源地址,我們打開一個(gè)新頁面試著訪問一下,發(fā)現(xiàn)了如下的內(nèi)容:

粗略一看,我們想這應(yīng)該是一個(gè)JSON數(shù)據(jù)格式,那就再試著把它放到解析站中看一看,結(jié)果不出我們所料,也證明了請求頭里的請求URL正是網(wǎng)頁的Ajax數(shù)據(jù)來源。

Ajax數(shù)據(jù)獲取

在之前分析的基礎(chǔ)上,實(shí)際我們就已經(jīng)得到一種獲取Ajax數(shù)據(jù)的方法:分析Ajax請求的URL構(gòu)成法,然后對其進(jìn)行頁面解析再數(shù)據(jù)提取。這一種方法可以很直接地獲取到源數(shù)據(jù),性能較高,但分析的成本一般來說也都很大。因?yàn)椴⒉皇撬械腢RL構(gòu)成法都是很容易得出來的,它可能混淆了很多加密機(jī)制,且通常需要有Js的功底輔助分析。

由此,我們提出了另一種策略:使用selenium模擬瀏覽器行為來獲取動態(tài)解析獲取數(shù)據(jù)。這里的selenium是什么呢?其實(shí)它相當(dāng)于的機(jī)器人,它可以模擬出人為操作瀏覽器的行為,比如點(diǎn)擊、輸入,拖動等。其實(shí)最初這主要是用于網(wǎng)頁測試,但發(fā)現(xiàn)其很符合爬蟲的特性,也因此廣泛用于爬蟲領(lǐng)域。在服務(wù)器看來,它就是人在訪問頁面,而很難捕捉到是爬蟲,因此安全性很高;但另一方面,使用它來獲取Ajax數(shù)據(jù)成本很大,較為繁瑣,性能不及分析URL。

上述就是常用的獲取Ajax數(shù)據(jù)的兩種方法,具體使用哪一種方法,我們可以先測試看一下所需要獲取的Ajax數(shù)據(jù)來源URL構(gòu)成法分析是否方便,如果較為規(guī)則便可以直接采用requests獲取;反之,若較為復(fù)雜則可以考慮使用selenium策略(更多的介紹在后續(xù)筆記中將會給予說明)。


轉(zhuǎn)載于:https://www.cnblogs.com/Unikfox/p/9719545.html

總結(jié)

以上是生活随笔為你收集整理的【Python爬虫学习笔记12】Ajax数据爬取简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。