一、網(wǎng)址分析
進(jìn)入自己的博客頁面,網(wǎng)址為:http://blog.csdn.net/xingjiarong 網(wǎng)址還是非常清晰的就是csdn的網(wǎng)址+個(gè)人csdn登錄賬號,我們來看一下下一頁的網(wǎng)址。
看到第二頁的地址為:http://blog.csdn.net/xingjiarong/article/list/2
后邊的數(shù)字表示現(xiàn)在正處于第幾頁,再用其他的頁面驗(yàn)證一下,確實(shí)是這樣的,那么第一頁為什么不是http://blog.csdn.net/xingjiarong/article/list/1呢,那么我們在瀏覽器中輸入http://blog.csdn.net/xingjiarong/article/list/1試試,哎,果然是第一頁啊,其實(shí)第一頁是被重定向了,http://blog.csdn.net/xingjiarong被重定向到http://blog.csdn.net/xingjiarong/article/list/1,所以兩個(gè)網(wǎng)址都能訪問第一頁,那么現(xiàn)在規(guī)律就非常明顯了:
http://blog.csdn.net/xingjiarong/article/list/ + 頁號
二、如何獲取標(biāo)題
右鍵查看網(wǎng)頁的源代碼,我們看到可以找到這樣一段代碼:
我們可以看到標(biāo)題都是在標(biāo)簽
所以我們可以使用下面的正則表達(dá)式來匹配標(biāo)題:
(.*?)
三、如何獲取訪問量
拿到了標(biāo)題之后,就要獲得對應(yīng)的訪問量了,經(jīng)過對源碼的分析,我看到訪問量的結(jié)構(gòu)都是這樣的:
閱讀(1140)
括號中的數(shù)字即為訪問量,我們可以用下面的正則表達(dá)式來匹配:
閱讀((.*?))
四、如何判斷是否為尾頁
接下來我們要判斷當(dāng)前頁是否為最后一頁,否則我們就不能判斷什么時(shí)候結(jié)束了,我找到了源碼中‘尾頁'的標(biāo)簽,發(fā)現(xiàn)是下面的結(jié)構(gòu):
下一頁 尾頁
所以我們可以用下面的正則表達(dá)式來匹配,如果匹配成功就說明當(dāng)前頁不是最后一頁,否則當(dāng)前頁就是最后一頁。
尾頁
五、編程實(shí)現(xiàn)
下面是完整的代碼實(shí)現(xiàn):
#!usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2016年2月13日 @author: xingjiarong 使用python爬取csdn個(gè)人博客的訪問量,主要用來練手 ''' import urllib2 import re #當(dāng)前的博客列表頁號 page_num = 1 #不是最后列表的一頁 notLast = 1 account = str(raw_input('輸入csdn的登錄賬號:')) while notLast: #首頁地址 baseUrl = 'http://blog.csdn.net/'+account #連接頁號,組成爬取的頁面網(wǎng)址 myUrl = baseUrl+'/article/list/'+str(page_num) #偽裝成瀏覽器訪問,直接訪問的話csdn會拒絕 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent':user_agent} #構(gòu)造請求 req = urllib2.Request(myUrl,headers=headers) #訪問頁面 myResponse = urllib2.urlopen(req) myPage = myResponse.read() #在頁面中查找是否存在‘尾頁'這一個(gè)標(biāo)簽來判斷是否為最后一頁 notLast = re.findall('尾頁',myPage,re.S) print '-----------------------------第%d頁---------------------------------' % (page_num,) #利用正則表達(dá)式來獲取博客的標(biāo)題 title = re.findall('(.*?)',myPage,re.S) titleList=[] for items in title: titleList.append(str(items).lstrip().rstrip()) #利用正則表達(dá)式獲取博客的訪問量 view = re.findall('閱讀((.*?))',myPage,re.S) viewList=[] for items in view: viewList.append(str(items).lstrip().rstrip()) #將結(jié)果
下面是部分結(jié)果:
輸入csdn的登錄賬號:xingjiarong -----------------------------第1頁--------------------------------- 訪問量:1821 標(biāo)題:python編程常用模板總結(jié) 訪問量:1470 標(biāo)題:設(shè)計(jì)模式之UML(一)類圖以及類間關(guān)系(泛化 、實(shí)現(xiàn)、依賴、關(guān)聯(lián)、聚合、組合) 訪問量:0714 標(biāo)題:ubuntu14.04 安裝并破解MyEclipse2014 訪問量:1040 標(biāo)題:ubuntu14.04 配置tomcat8 訪問量:1355 標(biāo)題:java調(diào)用python方法總結(jié) 訪問量:0053 標(biāo)題:Java多線程之Callable和Future 訪問量:1265 標(biāo)題:跟我學(xué)匯編(三)寄存器和物理地址的形成 訪問量:1083 標(biāo)題:跟我學(xué)匯編(二)王爽匯編環(huán)境搭建 訪問量:0894 標(biāo)題:跟我學(xué)匯編(一)基礎(chǔ)知識 訪問量:2334 標(biāo)題:java多線程(一)Race Condition現(xiàn)象及產(chǎn)生的原因 訪問量:0700 標(biāo)題:Matlab矩陣基礎(chǔ) 訪問量:0653 標(biāo)題:Matlab變量、分支語句和循環(huán)語句 訪問量:0440 標(biāo)題:Matlab字符串處理 訪問量:0514 標(biāo)題:Matlab運(yùn)算符與運(yùn)算 訪問量:0533 標(biāo)題:Matlab的數(shù)據(jù)類型 -----------------------------第2頁--------------------------------- 訪問量:0518 標(biāo)題:OpenStack設(shè)計(jì)與實(shí)現(xiàn)(五)RESTful API和WSGI 訪問量:0540 標(biāo)題:解決Android SDK Manager下載太慢問題 訪問量:0672 標(biāo)題:OpenStack設(shè)計(jì)與實(shí)現(xiàn)(四)消息總線(AMQP) 訪問量:0570 標(biāo)題:分布式文件存儲FastDFS(五)FastDFS常用命令總結(jié) 訪問量:0672 標(biāo)題:分布式文件存儲FastDFS(四)配置fastdfs-apache-module 訪問量:0979 標(biāo)題:分布式文件存儲FastDFS(一)初識FastDFS 訪問量:0738 標(biāo)題:分布式文件存儲FastDFS(三)FastDFS配置 訪問量:0682 標(biāo)題:分布式文件存儲FastDFS(二)FastDFS安裝 訪問量:0511 標(biāo)題:OpenStack設(shè)計(jì)與實(shí)現(xiàn)(三)KVM和QEMU淺析 訪問量:0593 標(biāo)題:OpenStack設(shè)計(jì)與實(shí)現(xiàn)(二)Libvirt簡介與實(shí)現(xiàn)原理 訪問量:0562 標(biāo)題:OpenStack設(shè)計(jì)與實(shí)現(xiàn)(一)虛擬化 訪問量:0685 標(biāo)題:食堂買飯的啟示 訪問量:0230 標(biāo)題:UML之時(shí)序圖詳解 訪問量:0890 標(biāo)題:設(shè)計(jì)模式之橋梁模式和策略模式的區(qū)別 訪問量:1258 標(biāo)題:設(shè)計(jì)模式(十二)責(zé)任鏈模式
總結(jié):
使用python編寫爬蟲,我個(gè)人總結(jié)了以下的步驟:
1、分析要抓取的網(wǎng)址特征,以確定如何生成相關(guān)網(wǎng)頁的網(wǎng)址,如果只爬取一個(gè)網(wǎng)頁,則這一步可以省略。
2、查看網(wǎng)頁的源碼,分析自己想要爬取的內(nèi)容所在的標(biāo)簽的特征。
3、使用正則表達(dá)式從源碼中將自己想要的部分摳出來。
4、編程實(shí)現(xiàn)。
以上內(nèi)容是針對如何使用python爬取csdn博客訪問量的相關(guān)知識,希望對大家有所幫助。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com