爬取今日頭條街拍圖片

前言

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

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

啰嗦心得

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

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

開始爬取

索引頁(yè)面

  • 前期要求

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

  • 索引頁(yè)面分析

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

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

  • 存在于CSS樣式中

  • 存在于 頁(yè)面的js代碼中

  • 存在于ajax的請(qǐng)求中(索引頁(yè)面就是這種)

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

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


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


      data

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

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

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

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

    • 代碼分析

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


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

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


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

詳情頁(yè)面

  • 詳情頁(yè)面分析

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

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


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

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

存儲(chǔ)到數(shù)據(jù)庫(kù)

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


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


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

下載圖片

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


    下載圖片
  • 將圖片數(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()

代碼地址

最后

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皮服,一起剝皮案震驚了整個(gè)濱河市楞艾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌龄广,老刑警劉巖硫眯,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異择同,居然都是意外死亡两入,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門奠衔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谆刨,“玉大人塘娶,你說我怎么就攤上這事∪玻” “怎么了刁岸?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)她我。 經(jīng)常有香客問我虹曙,道長(zhǎng),這世上最難降的妖魔是什么番舆? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任酝碳,我火速辦了婚禮,結(jié)果婚禮上恨狈,老公的妹妹穿的比我還像新娘疏哗。我一直安慰自己,他們只是感情好禾怠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布返奉。 她就那樣靜靜地躺著,像睡著了一般吗氏。 火紅的嫁衣襯著肌膚如雪芽偏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天弦讽,我揣著相機(jī)與錄音污尉,去河邊找鬼。 笑死往产,一個(gè)胖子當(dāng)著我的面吹牛被碗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捂齐,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛮放,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缩抡!你這毒婦竟也來了奠宜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瞻想,失蹤者是張志新(化名)和其女友劉穎压真,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蘑险,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滴肿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佃迄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泼差。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贵少,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堆缘,到底是詐尸還是另有隱情滔灶,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布吼肥,位于F島的核電站录平,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缀皱。R本人自食惡果不足惜斗这,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啤斗。 院中可真熱鬧表箭,春花似錦、人聲如沸钮莲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)臂痕。三九已至伯襟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間握童,已是汗流浹背姆怪。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澡绩,地道東北人稽揭。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像肥卡,于是被迫代替她去往敵國(guó)和親溪掀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

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