【Python爬蟲學習筆記12】Ajax數據爬取簡介

有時候在咱們設計利用requests抓取網頁數據的時候,會發現所得到的結果可能與瀏覽器顯示給咱們的不同:好比說有的信息咱們經過瀏覽器能夠顯示,但一旦用requests卻得不到想要的結果。這種現象是由於咱們經過requests得到的都是HTML源文檔,而瀏覽器中見到的頁面數據都是通過JavaScript處理的,而這些處理的數據多是經過Ajax加載、自己包含於HTML中或是通過JavaScript自動生成。面試

由Web發展趨勢來看,愈來愈多的網頁都經過Ajax加載來呈現,即網頁數據加載是一種異步加載方式,網頁自己不包含數據,而是在初始化網頁後自動地經過向服務器發送Ajax請求,而後從服務器獲取相應數據以後在渲染到網頁上。本節下面將重點介紹Ajax的相關概念和如何判斷和獲取是否由Ajax請求,並在後面介紹爬取Ajax數據的兩種基本方法。瀏覽器

Ajax簡介

Ajax(全稱Asynchronous JavaScript and XML,異步的JavaScript 和 XML),是一種利用JavaScript在保證頁面不被刷新、頁面連接不改變的狀況下與服務器交換數據並更新部分網頁的技術。使用Ajax的示例有不少,好比說新浪微博和不凡商業的查看更多等。安全

image

image

Ajax分析

初步瞭解Ajax後,咱們即可以知道其加載過程主要分爲三個步驟:發送請求——解析內容——渲染頁面。那麼,咱們又是如何判斷頁面是經過發送Ajax請求來動態加載的,又如何肯定其請求的地址呢?服務器

其實,判斷一個頁面是否爲Ajax請求加載,咱們能夠藉助Chrome瀏覽器的工具欄。以不凡商業網站爲例,咱們先調出Chrome瀏覽器的Network工具欄,選擇XHR進行過濾(其實這一個就是表明請求的類型,也就是Ajax的請求類型),再刷新頁面即可看到當前全部的Ajax請求了。異步

image

接着咱們下拉到網頁底部並試着點擊查看更多,就會發現請求列表中多了一個請求,如圖所示,咱們再試着點擊屢次,又會有更多新的請求,所以咱們也就能夠肯定這是經過Ajax來加載的。工具

image

由此,咱們即可以經過分析每個請求的請求頭具體內容來獲取數據源。如上圖中的Request URL裏的內容就是剛剛加載的數據的來源地址,咱們打開一個新頁面試着訪問一下,發現了以下的內容:性能

image

粗略一看,咱們想這應該是一個JSON數據格式,那就再試着把它放到解析站中看一看,結果不出咱們所料,也證實了請求頭裏的請求URL正是網頁的Ajax數據來源。測試

image

Ajax數據獲取

在以前分析的基礎上,實際咱們就已經獲得一種獲取Ajax數據的方法:分析Ajax請求的URL構成法,而後對其進行頁面解析再數據提取。這一種方法能夠很直接地獲取到源數據,性能較高,但分析的成本通常來講也都很大。由於並非全部的URL構成法都是很容易得出來的,它可能混淆了不少加密機制,且一般須要有Js的功底輔助分析。網站

由此,咱們提出了另外一種策略:使用selenium模擬瀏覽器行爲來獲取動態解析獲取數據。這裏的selenium是什麼呢?其實它至關於的機器人,它能夠模擬出人爲操做瀏覽器的行爲,好比點擊、輸入,拖動等。其實最初這主要是用於網頁測試,但發現其很符合爬蟲的特性,也所以普遍用於爬蟲領域。在服務器看來,它就是人在訪問頁面,而很難捕捉到是爬蟲,所以安全性很高;但另外一方面,使用它來獲取Ajax數據成本很大,較爲繁瑣,性能不及分析URL。加密

上述就是經常使用的獲取Ajax數據的兩種方法,具體使用哪種方法,咱們能夠先測試看一下所須要獲取的Ajax數據來源URL構成法分析是否方便,若是較爲規則即可以直接採用requests獲取;反之,若較爲複雜則能夠考慮使用selenium策略(更多的介紹在後續筆記中將會給予說明)。

相關文章
相關標籤/搜索