使用python爬蟲工具Scrapy統(tǒng)計簡書文章閱讀量

突然發(fā)現(xiàn)多年來一直斷斷續(xù)續(xù)在學(xué)習(xí)使用的python果覆,擁有著廣泛的使用場景,從開源硬件殖熟、服務(wù)器運維局待、自動化測試,到數(shù)學(xué)計算,人工智能钳榨,都有python的一席之地舰罚,在各個領(lǐng)域python有豐富的框架和工具。

聽聞python的Scrapy爬蟲已久薛耻,最近正好想對去年一年在簡書寫作的文章做一下統(tǒng)計营罢。作為軟件工程師,肯定不能去按計算器饼齿,正好找到一個可以使用scrapy的場景饲漾,直接用爬蟲來抓取簡書頁面,然后提取數(shù)據(jù)作統(tǒng)計缕溉。

工作原理和步驟

  1. 分析要抓取的頁面結(jié)構(gòu)考传,找到有價值的信息;
  2. 通過發(fā)起http請求证鸥,獲得要抓取頁面的html正文僚楞;
  3. 分析html頁面的標(biāo)簽結(jié)構(gòu),根據(jù)xml層級結(jié)構(gòu)或者css選擇器語法枉层,讀取到需要的document元素泉褐;
  4. 設(shè)計數(shù)據(jù)結(jié)構(gòu)和計算規(guī)則,進行統(tǒng)計鸟蜡,然后將結(jié)果輸出

抓取網(wǎng)頁的話使用urllib庫其實就可以完成膜赃,css選擇器的話,python也有pyquery提供類似jquery的功能揉忘。剩下就是簡單的數(shù)據(jù)統(tǒng)計了财剖。

使用Scrapy動手操作

完整的項目還沒有整理好,暫時不提供代碼癌淮,本身核心業(yè)務(wù)邏輯的代碼量并不多。

安裝python和scrapy

#安裝pip
apt-get install -y build-essential libffi-dev libxml2-dev libxslt1-dev libevent-dev libssl-dev zlib1g-dev  python-dev python-pip
pip install -U pip

#安裝scrapy
pip install scrapy

本次應(yīng)用中使用pip來安裝scrapy沦补,詳細(xì)安裝可以參看官網(wǎng)乳蓄,安裝pip的同時,需要安裝一些linux開發(fā)相關(guān)的工具夕膀。

需要注意的事項有兩點虚倒,首先如果是在mac上安裝的話,由于操作系統(tǒng)以來sis這個庫产舞,而scrapy需要更高版本的sis魂奥,無法升級,所以可能有坑易猫,筆者直接使用docker搭建的容器進行開發(fā)耻煤,所以不存在問題;另外一個是pip源,在國內(nèi)可能下載速度會比較慢哈蝇,可以使用國內(nèi)的源或者翻墻下載棺妓。

import sys
import scrapy
import csv

class MyJianShuSpider(scrapy.Spider):
    name = 'my_jisnshu_spider'
    page = 1
    userid = 'yourid'
    base_url = 'http://www.reibang.com/u/yourid?order_by=shared_at&page='
    start_urls = ['http://www.reibang.com/u/yourid?order_by=shared_at&page=1']
    headers = {
      "Host": "www.reibang.com",
      "User-Agent": "your agent",
      "Accept": "*/*"
    }

    def start_requests(self):
        url = self.base_url + str(self.page)
        yield scrapy.Request(url, headers=self.headers, callback=self.parse)

    def parse(self, response):
        for item in response.css('ul.note-list li'):
            print publishTimeText = item.css('.author .name > .time ::attr(data-shared-at)').extract_first()

Scrapy基本工作原理

scrapy提供了Spider類,該類通過start_requests接口被scrapy執(zhí)行器調(diào)用炮赦,運行scrapy執(zhí)行器怜跑,就會從入口點start_requests開始執(zhí)行爬蟲的代碼;使用過javascript的es2015應(yīng)該會比較容易理解yield吠勘,感覺是js也借鑒了很多python的理念性芬。

在Spider執(zhí)行過程中,任何時候都可以通過調(diào)用scrapy.Request來發(fā)起一個爬蟲抓取操作剧防,callback參數(shù)是抓取的網(wǎng)絡(luò)請求成功之后的回調(diào)函數(shù)植锉,url是請求的鏈接地址,headers是http協(xié)議的頭部诵姜,可以根據(jù)需要設(shè)置汽煮。

簡書頁面的相關(guān)結(jié)構(gòu)

查看簡書列表頁面的document結(jié)構(gòu),很容易找到#list-container下面的ul列表就是包含我們要統(tǒng)計的信息的節(jié)點棚唆,因此可以直接使用scrapy提供的css選擇器來獲取暇赤。執(zhí)行回調(diào)函數(shù)response.css('ul.note-list li')就獲取到了一個列表,對列表做循環(huán)處理宵凌,取出每一個需要的元素鞋囊。

#發(fā)表時間
publishTimeText = item.css('.author .name > .time ::attr(data-shared-at)').extract_first()
# 摘要
abstractText = item.css('p.abstract ::text').extract_first()
# 文章標(biāo)題
titleText = item.css('a.title ::text').extract_first()
# 文章的鏈接
articleLink = item.css('a.title ::attr(href)').extract_first()

#統(tǒng)計信息
metaList = item.css('.meta > a ::text').re(r' ([0-9]*)\n')

最后的metaList返回的是一個數(shù)組,下標(biāo)0-2分別是閱讀瞎惫、評論和點贊的數(shù)目溜腐。

在實際獲取到的列表頁面中,頁面的文章是通過異步加載瓜喇,每次獲取一頁數(shù)據(jù)的挺益,所以在抓取過程中,需要多次抓取每次抓取一頁乘寒,直到?jīng)]有更多文章為止望众。

生成的表格

簡書實際上提供了分頁的文章列表頁,可以分頁獲取數(shù)據(jù)伞辛,頁面中頁可以找到是否還有更多文章的標(biāo)記烂翰。為了不破壞讀者探索的樂趣,文章里就不詳細(xì)介紹了蚤氏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甘耿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竿滨,更是在濱河造成了極大的恐慌佳恬,老刑警劉巖捏境,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異殿怜,居然都是意外死亡典蝌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門头谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骏掀,“玉大人,你說我怎么就攤上這事柱告〗赝裕” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵际度,是天一觀的道長葵袭。 經(jīng)常有香客問我,道長乖菱,這世上最難降的妖魔是什么坡锡? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮窒所,結(jié)果婚禮上鹉勒,老公的妹妹穿的比我還像新娘。我一直安慰自己吵取,他們只是感情好禽额,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著皮官,像睡著了一般脯倒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捺氢,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天藻丢,我揣著相機與錄音,去河邊找鬼摄乒。 笑死郁岩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缺狠。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼萍摊,長吁一口氣:“原來是場噩夢啊……” “哼挤茄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冰木,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤穷劈,失蹤者是張志新(化名)和其女友劉穎笼恰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歇终,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡社证,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了评凝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片追葡。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奕短,靈堂內(nèi)的尸體忽然破棺而出宜肉,到底是詐尸還是另有隱情,我是刑警寧澤翎碑,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布谬返,位于F島的核電站,受9級特大地震影響日杈,放射性物質(zhì)發(fā)生泄漏遣铝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一莉擒、第九天 我趴在偏房一處隱蔽的房頂上張望酿炸。 院中可真熱鬧,春花似錦啰劲、人聲如沸梁沧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廷支。三九已至,卻和暖如春栓辜,著一層夾襖步出監(jiān)牢的瞬間恋拍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工藕甩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留施敢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓狭莱,卻偏偏與公主長得像僵娃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子腋妙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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