pythoncsdn
一、網址分析
進入自己的博客頁面,網址為: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/ + 頁號
二、如何獲取標題
右鍵查看網頁的源代碼,我們看到可以找到這樣一段代碼:
我們可以看到標題都是在標簽
<span class="link_title"><a href="/xingjiarong/article/details/50651235">
所以我們可以使用下面的正則表達式來匹配標題:
<span class="link_title"><a href=".*?">(.*?)</a></span>
三、如何獲取訪問量
拿到了標題之後,就要獲得對應的訪問量了,經過對源碼的分析,我看到訪問量的結構都是這樣的:
<span class="link_view" title="閱讀次數"> <a href="/xingjiarong/article/details/50651235" title="閱讀次數">閱讀</a>(1140)</span>
括弧中的數字即為訪問量,我們可以用下面的正則表達式來匹配:
<span class="link_view".*?><a href=".*?" title="閱讀次數">閱讀</a>\((.*?)\)</span>
四、如何判斷是否為尾頁
接下來我們要判斷當前頁是否為最後一頁,否則我們就不能判斷什麼時候結束了,我找到了源碼中『尾頁'的標簽,發現是下面的結構:
<a href="/xingjiarong/article/list/2">下一頁</a> <a href="/xingjiarong/article/list/7">尾頁</a>
所以我們可以用下面的正則表達式來匹配,如果匹配成功就說明當前頁不是最後一頁,否則當前頁就是最後一頁。
<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
Ⅱ Python Matplotlib畫圖
主要用於作圖、可視化問題
pip install matplotlib
導入模塊 pyplot 和 pylab ,可以參考下面鏈接觀察兩者區別:
https://www.cnblogs.com/Shoesy/p/6673947.html
(說白了就是pylay=pyplot+numpy)
輸入這三行解決
主要使用 plot() 來展示,裡面前兩個參數代表 x , y 坐標(注意x,y數量要一樣),第三個參數可以用來設置散點圖( 'o' )或者顏色、線條形式等各種樣式,並且第三個參數可以同時傳入多個,比如要紅色的散點圖就: Ɔr'
(1)顏色樣式:
(2)線條樣式:
(3)點的樣式:
(4)坐標區間:
或者分別設置x、y的區間:
註:
設置點的樣式時默認就是散點圖,以及同類樣式只能設置一個(比如不能設置兩種顏色),並且還可以把多個圖集合在一起展示,那就多 plot 幾個,plot就相當於一個畫布,每plot一個就相當於在上面畫一張圖,再弄就繼續在上面畫
主要用 hist() 來顯示,實現方式很簡單,把一組數據放入括弧里就行了,例如隨機生成一堆正態分布的數,然後直方圖顯示:
其中如果要設置直方圖格式(寬度、上下限、是否要輪廓)可以這樣:
註:
直方圖和折線圖這些不太一樣,折線圖是傳入兩個等長數據,然後每個x、y坐標一一對應展示出來。而直方圖是:第一個參數代表你傳入的所有數據,第二個參數代表你傳入的x軸范圍,然後直方圖會將第一個參數里傳入的數據一個個計算在某個范圍內含有的數據量,因此傳入的兩個參數數據不一定要等長,例如下面的例子:
結果如圖:
可以看出數據被自動分配到對應的范圍內上了
使用 subplot(row, col, area) :三個參數分別是行數、列數和區域,比如要將原圖分成2行2列(切成4份),然後要左下角那個圖就:
如果想4個圖都顯示就4個 subplot ,分別1、2、3、4就行了,然後在各圖的subplot之後寫的都是每個圖的內容,現在我們試試弄一個2行,第一行兩列的圖片(想像下滑鼠的樣子),而且分別是不同的內容:
註:
labels 、 sizes 、 colors 和 explode 的長度都要一樣
1.導入3D圖相關模塊:
2.將畫圖板加到3D模塊里,然後加入數據即可:
3D散點圖舉例:
通過 imread() 讀取,舉例:
https://blog.csdn.net/qq_34859482/article/details/80617391