最近學習了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/ + 頁號
二、如何獲取標題
右鍵查看網頁的源代碼,我們看到可以找到這樣一段代碼:
我們可以看到標題都是在標簽
1
|
<span class = "link_title" ><a href = "/xingjiarong/article/details/50651235" > |
所以我們可以使用下面的正則表達式來匹配標題:
1
|
<span class = "link_title" ><a href = ".*?" >(. * ?)< / a>< / span> |
三、如何獲取訪問量
拿到了標題之后,就要獲得對應的訪問量了,經過對源碼的分析,我看到訪問量的結構都是這樣的:
1
|
<span class = "link_view" title = "閱讀次數" > <a href = "/xingjiarong/article/details/50651235" title = "閱讀次數" >閱讀< / a>( 1140 )< / span> |
括號中的數字即為訪問量,我們可以用下面的正則表達式來匹配:
1
|
<span class = "link_view" . * ?><a href = ".*?" title = "閱讀次數" >閱讀< / a>((. * ?))< / span> |
四、如何判斷是否為尾頁
接下來我們要判斷當前頁是否為最后一頁,否則我們就不能判斷什么時候結束了,我找到了源碼中‘尾頁'的標簽,發現是下面的結構:
1
|
<a href = "/xingjiarong/article/list/2" >下一頁< / a> <a href = "/xingjiarong/article/list/7" >尾頁< / a> |
所以我們可以用下面的正則表達式來匹配,如果匹配成功就說明當前頁不是最后一頁,否則當前頁就是最后一頁。
1
|
<a href = ".*?" >尾頁< / a> |
五、編程實現
下面是完整的代碼實現:
- #!usr/bin/python
- # -*- coding: utf-8 -*-
- '''
- Created on 2016年2月13日
- @author: xingjiarong
- 使用python爬取csdn個人博客的訪問量,主要用來練手
- '''
- import urllib2
- import re
- #當前的博客列表頁號
- page_num = 1
- #不是最后列表的一頁
- notLast = 1
- account = 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('<a href=".*?">尾頁</a>',myPage,re.S)
- print '-----------------------------第%d頁---------------------------------' % (page_num,)
- #利用正則表達式來獲取博客的標題
- title = re.findall('<span class="link_title"><a href=".*?">(.*?)</a></span>',myPage,re.S)
- titleList=[]
- for items in title:
- titleList.append(str(items).lstrip().rstrip())
- #利用正則表達式獲取博客的訪問量
- view = re.findall('<span class="link_view".*?><a href=".*?" title="閱讀次數">閱讀</a>((.*?))</span>',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])
- #頁號加1
- page_num = page_num + 1
下面是部分結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
輸入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、使用正則表達式從源碼中將自己想要的部分摳出來。
4、編程實現。
以上內容是針對如何使用python爬取csdn博客訪問量的相關知識,希望對大家有所幫助。