【一塊兒學爬蟲】分析Ajax,抓取今日頭條街拍美圖

簡介

本文經過分析Ajax請求,而後使用requests來爬取今日頭條街拍美圖數據。有些網頁直接請求並無包括咱們在瀏覽器中看到的內容,這是由於這些信息是經過Ajax加載,而且經過js渲染生成的,這時候就須要咱們分析網頁的請求。 本文使用的解析庫是Beautifulsoup和正則表達式,請求使用的是requestshtml

目標站點分析

今天咱們要爬取的就是上圖中的圖片 (1)請求分析 郵件->檢查->network->preserve log 從新刷新頁面,查看key words請求的返回結果
對返回結果分析發現: 裏面都是一些js,並無咱們須要的街拍圖片信息 這些數據實際上是經過Ajax來加載的,以下圖:
下面截圖中的share_url對應的就是左邊第一個結果點進去後的超連接,另外,用鼠標不斷下滑頁面:
隨着你不斷下滑瀏覽頁面,Ajax請求也愈來愈多,也就是說: 頁面上的數據不是一次性加載的,是隨着頁面的滑動動態加載的更具體而言,這些請求以下:
實際上改變offset就能夠獲取到對應返回的json數據了,咱們須要的是一個循環,改變請求連接中的offset,去請求這些地址就能夠獲取到對應的數據了。獲得返回的就送數據後,使用json解析數據就能夠了

總體搜索結果分析以後,咱們進入一個具體的結果,分析每個結果集的數據圖片是經過什麼方式加載的,咱們點擊任意一個「街拍 圖集」的搜索結果: java

上面這張圖是片是經過什麼方式加載的呢?也會是Ajax嗎?請求分析:
對原始的請求分析發現:圖片連接地址在js變量中:
因爲gallery變量不是隱藏在html中,咱們就不能使用Beautifulsoup和PyQuery等解析庫去解析,比較簡單的方式就是正則表達式解析。

流程框架分析

  • 獲取關鍵詞‘街拍 美圖’搜索結果,這部分是經過Ajax動態加載的,只須要使用requests請求便可(更改offset),每一個Ajax請求返回的是多個搜索結果
  • 每一個搜索結果的詳情數據頁的圖片地址在js中(如上圖所示),使用正則匹配便可

實現分析

在獲取「街拍 美圖」的關鍵詞搜索結果時注意參數設置 python

上圖是搜索關鍵詞後返回的結果,由以前分析知道,返回結果是經過Ajax動態加載的,每個Ajax請求都有對應的參數也就是上圖中紅色方框中的那部分參數,不一樣Ajax請求只須要更改offset便可,offset每次遞增20。斌而且有請求頭知道,Ajax是get請求:
上述參數在代碼中就是對應字典形式 而後經過url拼接和urlencode(字典參數)拼接請求地址 urlencode能夠將字典參數轉換成url請求參數,由urllib庫提供的方法

  • 使用json解析返回的data json數組,提取data數組中的share_url(文章詳情連接地址)、title(標題)

源碼和數據:

** 爬取的數據** 面試


掃描下方二維碼,發送關鍵詞「街拍美圖」便可獲取本文的完整源碼和詳細程序註釋 正則表達式

掃碼關注,及時獲取更多精彩內容。(博主今日頭條大數據工程師)

資料分享

java學習筆記、10T資料、100多個java項目分享json


歡迎關注我的公衆號【菜鳥名企夢】,公衆號專一:互聯網求職面經javapython爬蟲大數據等技術分享**: 公衆號**菜鳥名企夢後臺發送「csdn」便可免費領取【csdn】和【百度文庫】下載服務; 公衆號菜鳥名企夢後臺發送「資料」:便可領取5T精品學習資料**、java面試考點java面經總結,以及幾十個java、大數據項目資料很全,你想找的幾乎都有數組

相關文章
相關標籤/搜索