爬取今日頭條街拍圖片

前言

本博客主要記錄跟隨崔慶才老師的分析Ajax抓取今日頭條街拍美圖學(xué)習(xí)的整個(gè)過程,更多精品文章,請參閱崔老師的博客,再次感謝崔老師教導(dǎo)。

3月15日更新,14日代碼敲完了,今天主要總結(jié)整個(gè)過程

啰嗦心得

  • 個(gè)人覺得在掌握了Python的基礎(chǔ)的前提下,爬蟲的難點(diǎn)在于兩點(diǎn):

    • 分析網(wǎng)頁結(jié)構(gòu),看要獲取的數(shù)據(jù)獲取的方式
    • 利用語言知識去匹配或者利用其它的方法,比如ajax等發(fā)起請求獲取數(shù)據(jù)等等
  • 這兩點(diǎn)前者更為復(fù)雜,因?yàn)橛械木W(wǎng)頁比如本例中,街拍的索引頁面的詳情頁面中,詳情的數(shù)據(jù)是在頁面的一個(gè)js的變量中,但是在我跟隨視頻學(xué)習(xí)的過程中發(fā)現(xiàn),此時(shí)的頁面很多已經(jīng)不是存在一個(gè)變量中,而是存在于標(biāo)簽中,說明頁面是有過改版,此時(shí)同一個(gè)詳情頁面就不能一概而論,要寫不同的方法處理,不過由于爬蟲功底還很薄弱,所以對于存在于標(biāo)簽中的鏈接,我并沒有處理,而是進(jìn)行了過濾,待到基礎(chǔ)比較扎實(shí)以后,會對代碼進(jìn)行更新(March 15

開始爬取

索引頁面

  • 前期要求

簡單來說此次抓取氛圍兩部分,一部分是圖片的索引頁面,另外一部分是通過點(diǎn)擊索引進(jìn)入詳情頁面,抓取具體的圖片的地址,并將其存儲,最后下載圖片資源

  • 索引頁面分析

跟隨視頻學(xué)習(xí),打開谷歌的工具查看索引頁面的源代碼,沒有看到和素材相關(guān)的資源,這里略總結(jié)一下,以目前自己所學(xué)的這點(diǎn)知識,想要的鏈接信息主要存在于一下三方面的元素中

  • 存在于HTML的標(biāo)簽的鏈接中

  • 存在于CSS樣式中

  • 存在于 頁面的js代碼中

  • 存在于ajax的請求中(索引頁面就是這種)

  • 索引頁數(shù)據(jù)分析

    • 通過分析所以頁面是通過ajax請求獲取到的,通過Google瀏覽器的工具filter工具的XHR過濾項(xiàng)可以看出


      xhr.png
    • 索引頁面數(shù)據(jù)分析,參看下圖


      data

      具體索引鏈接
    • 經(jīng)過分析是通過ajax請求,獲取回來的數(shù)據(jù),其中article_url就是進(jìn)入詳情頁面的鏈接,我們通過構(gòu)建一個(gè)ajax請求,然后獲取返回?cái)?shù)據(jù),在獲取字段
  • 索引頁抓取

    • 構(gòu)建ajax請求獲取數(shù)據(jù)

    • 代碼 <b>由于markdown格式問題,我就不粘貼代碼,用圖片代替,博客末尾我會附上代碼地址

      索引頁面數(shù)據(jù)獲取

    • 代碼分析

      • data:是ajax的所需要的參數(shù),這個(gè)參數(shù)是參看XHR中的


        參數(shù)
      • url : baseUrl + 經(jīng)過轉(zhuǎn)碼的參數(shù),成為完整的url【get請求】,其中轉(zhuǎn)碼函數(shù)urlencode包含在你from urllib import urlencode
      • 請求:本次的請求框架是requests,我一直以為requests是Python的原生庫,其實(shí)屬于第三方框架 ,故安裝sudo pip install requests,導(dǎo)入import requests,具體訪問參見代碼
    • 解析索引頁面返回的json數(shù)據(jù)

      • 根據(jù)之前的分析,ajax請求返回值的數(shù)據(jù)類型是json,故利用Python內(nèi)部的json模塊就可以解析import json
      • json 解析完成以后,就可以根據(jù)節(jié)點(diǎn)取出相應(yīng)的值,通過遍歷數(shù)據(jù)返回一個(gè)首頁的索引的ur列表


        索引數(shù)據(jù)解析

詳情頁面

  • 詳情頁面分析

經(jīng)過分析,在圖片的詳情頁面圖片數(shù)據(jù)是存儲在頁面的 var gallery變量中,這變量后面也是一個(gè)json數(shù)據(jù),所以我們經(jīng)過正則匹配來或者這個(gè)變量后邊的json數(shù)據(jù)

  • 詳情頁面抓取
    這個(gè)比較簡單,根據(jù)索引頁的url,進(jìn)行頁面獲取,與索引頁的獲取基本相同


    詳情頁面獲取
  • 詳情頁面解析
    這里要做的工作就是在頁面中通過正則匹配找到var gallery,然后獲取后面的json數(shù)據(jù)
    gallery后邊的json數(shù)據(jù)結(jié)構(gòu)

    詳情頁面解析
    • 由于詳情頁面就是普通的HTML頁面,可以通過BeautifulSoup框架解析, BeautifulSoup框架需要通過pip安裝,然后導(dǎo)入from bs4 import BeautifulSoup
  • 將匹配完獲取的數(shù)據(jù)用json框架進(jìn)行解析,由于圖片數(shù)據(jù)是一個(gè)數(shù)組,故需要遍歷取值
  • 返回一個(gè)數(shù)組,包括詳情頁面的標(biāo)題,詳情頁面的url,圖片的url數(shù)組

存儲到數(shù)據(jù)庫

  • 下載安裝mongoDB,這里不贅述
  • 配置mongoDB,可以參見我的博客
  • pycharm配置mongoDB
    • 創(chuàng)建config.py配置文件,然后配置一些參數(shù),包括主機(jī),數(shù)據(jù)庫名,表名


    • 創(chuàng)建數(shù)據(jù)庫,主要利用pymongo(import pymongo)框架,因?yàn)檠芯康牟皇呛軓氐?,這里只寫一些簡單的代碼,不要忘記導(dǎo)入配置文件from config import *
      創(chuàng)建數(shù)據(jù)庫
    • 存儲數(shù)據(jù)


      存儲數(shù)據(jù)

下載圖片

  • 通過url下載圖片數(shù)據(jù),是Python相關(guān)知識,不贅述


    下載圖片
  • 將圖片數(shù)據(jù)轉(zhuǎn)換為圖片


    轉(zhuǎn)換數(shù)據(jù)

將以上代碼整體串接調(diào)用

def main(offset):
    html = get_page_index(offset, KEYWORD)
    for url in parse_page_index(html):
        detail = get_page_detail(url)
        # 這里進(jìn)行一下判斷,如果能正常返回在進(jìn)行解析
        if detail and parse_page_detail(detail, url):
            result = parse_page_detail(detail, url)
            if result:
                save_to_db(result)

if __name__ == "__main__":
       main()

代碼地址

最后

無論從接觸爬蟲還是博客的編寫都顯得匆忙和粗糙,以后隨著知識的完善,博客也會進(jìn)行相應(yīng)的更新,希望大家不吝賜教,提出問題指正,謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,358評論 4 61
  • 拍照或拍視頻視頻后,掃描把文件添加到系統(tǒng)媒體庫,也就是更新系統(tǒng)圖庫/相冊,以便使用ContentResolver查...
    lioilwin閱讀 5,970評論 0 4
  • 我的心 在空中游動 尋找一個(gè)怒放著山茶花的山麓 抑或 一個(gè)散發(fā)著紫羅蘭芬芳的幽谷 靜靜地扎根 然后 生成一團(tuán)火 化...
    格爾黑閱讀 340評論 14 30

友情鏈接更多精彩內(nèi)容