如何使用python爬取csdn部落格訪問量

來源:互聯網
上載者:User
最近學習了python和爬蟲,想寫一個程式練練手,所以我就想到了大家都比較關心的自己的部落格訪問量,使用python來擷取自己部落格的訪問量,這也是後邊我將要進行的項目的一部分,後邊我會對部落格的訪問量進行分析,以折線圖和餅圖等可視化的方式展示自己部落格被訪問的情況,使自己能更加清楚自己的哪些部落格更受關注,部落格專家請勿噴,因為我不是專家,我聽他們說專家本身就有這個功能。

一、網址分析

進入自己的部落格頁面,網址為:http://blog.csdn.net/xingjiarong 網址還是非常清晰的就是csdn的網址+個人csdn登入帳號,我們來看一下下一頁的網址。

看到第二頁的地址為:http://blog.csdn.net/xingjiarong/article/list/2
後邊的數字表示現在正處於第幾頁,再用其他的頁面驗證一下,確實是這樣的,那麼第一頁為什麼不是http://blog.csdn.net/xingjiarong/article/list/1呢,那麼我們在瀏覽器中輸入http://blog.csdn.net/xingjiarong/article/list/1試試,哎,果然是第一頁啊,其實第一頁是被重新導向了,http://blog.csdn.net/xingjiarong被重新導向到http://blog.csdn.net/xingjiarong/article/list/1,所以兩個網址都能訪問第一頁,那麼現在規律就非常明顯了:
http://blog.csdn.net/xingjiarong/article/list/ + 頁號

二、如何擷取標題

右鍵查看網頁的原始碼,我們看到可以找到這樣一段代碼:

我們可以看到標題都是在標籤


所以我們可以使用下面的Regex來匹配標題:

(.*?)

三、如何擷取訪問量

拿到了標題之後,就要獲得對應的訪問量了,經過對源碼的分析,我看到訪問量的結構都是這樣的:

 閱讀(1140)

括弧中的數字即為訪問量,我們可以用下面的Regex來匹配:

閱讀\((.*?)\)

四、如何判斷是否為尾頁

接下來我們要判斷當前頁是否為最後一頁,否則我們就不能判斷什麼時候結束了,我找到了源碼中‘尾頁'的標籤,發現是下面的結構:

下一頁 尾頁

所以我們可以用下面的Regex來匹配,如果匹配成功就說明當前頁不是最後一頁,否則當前頁就是最後一頁。

尾頁

五、編程實現

下面是完整的代碼實現:

#!usr/bin/python# -*- coding: utf-8 -*-'''Created on 2016年2月13日@author: xingjiarong使用python爬取csdn個人部落格的訪問量,主要用來練手'''import urllib2import re#當前的部落格列表頁號page_num = 1#不是最後列表的一頁notLast = 1account = str(raw_input('輸入csdn的登入帳號:'))while notLast:#首頁地址baseUrl = 'http://blog.csdn.net/'+account#串連頁號,組成爬取的頁面網址myUrl = baseUrl+'/article/list/'+str(page_num)#偽裝成瀏覽器訪問,直接存取的話csdn會拒絕user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers = {'User-Agent':user_agent}#構造請求req = urllib2.Request(myUrl,headers=headers)#訪問頁面myResponse = urllib2.urlopen(req)myPage = myResponse.read()#在頁面中尋找是否存在‘尾頁'這一個標籤來判斷是否為最後一頁notLast = re.findall('尾頁',myPage,re.S)print '-----------------------------第%d頁---------------------------------' % (page_num,)#利用Regex來擷取部落格的標題title = re.findall('(.*?)',myPage,re.S)titleList=[]for items in title:titleList.append(str(items).lstrip().rstrip()) #利用Regex擷取部落格的訪問量view = re.findall('閱讀\((.*?)\)',myPage,re.S)viewList=[]for items in view:viewList.append(str(items).lstrip().rstrip())#將結果輸出 for n in range(len(titleList)):print '訪問量:%s 標題:%s' % (viewList[n].zfill(4),titleList[n])#頁號加1page_num = page_num + 1

下面是部分結果:

輸入csdn的登入帳號:xingjiarong-----------------------------第1頁---------------------------------訪問量:1821 標題:python編程常用模板總結訪問量:1470 標題:設計模式之UML(一)類圖以及類間關係(泛化 、實現、依賴、關聯、彙總、組合)訪問量:0714 標題:ubuntu14.04 安裝並破解MyEclipse2014訪問量:1040 標題:ubuntu14.04 配置tomcat8訪問量:1355 標題:java調用python方法總結訪問量:0053 標題:Java多線程之Callable和Future訪問量:1265 標題:跟我學彙編(三)寄存器和物理地址的形成訪問量:1083 標題:跟我學彙編(二)王爽彙編環境搭建訪問量:0894 標題:跟我學彙編(一)基礎知識訪問量:2334 標題:java多線程(一)Race Condition現象及產生的原因訪問量:0700 標題:Matlab矩陣基礎訪問量:0653 標題:Matlab變數、分支語句和迴圈語句訪問量:0440 標題:Matlab字串處理訪問量:0514 標題:Matlab運算子與運算訪問量:0533 標題:Matlab的資料類型-----------------------------第2頁---------------------------------訪問量:0518 標題:OpenStack設計與實現(五)RESTful API和WSGI訪問量:0540 標題:解決Android SDK Manager下載太慢問題訪問量:0672 標題:OpenStack設計與實現(四)訊息匯流排(AMQP)訪問量:0570 標題:分布式檔案儲存體FastDFS(五)FastDFS常用命令總結訪問量:0672 標題:分布式檔案儲存體FastDFS(四)配置fastdfs-apache-module訪問量:0979 標題:分布式檔案儲存體FastDFS(一)初識FastDFS訪問量:0738 標題:分布式檔案儲存體FastDFS(三)FastDFS配置訪問量:0682 標題:分布式檔案儲存體FastDFS(二)FastDFS安裝訪問量:0511 標題:OpenStack設計與實現(三)KVM和QEMU淺析訪問量:0593 標題:OpenStack設計與實現(二)Libvirt簡介與實現原理訪問量:0562 標題:OpenStack設計與實現(一)虛擬化訪問量:0685 標題:食堂買飯的啟示訪問量:0230 標題:UML之時序圖詳解訪問量:0890 標題:設計模式之橋樑模式和策略模式的區別訪問量:1258 標題:設計模式(十二)責任鏈模式

總結:

使用python編寫爬蟲,我個人總結了以下的步驟:

1、分析要抓取的網址特徵,以確定如何產生相關網頁的網址,如果只爬取一個網頁,則這一步可以省略。

2、查看網頁的源碼,分析自己想要爬取的內容所在的標籤的特徵。

3、使用Regex從源碼中將自己想要的部分摳出來。

4、編程實現。

以上內容是針對如何使用python爬取csdn部落格訪問量的相關知識,希望對大家有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.