1. 程式人生 > >簡單的Python爬蟲抓資料

簡單的Python爬蟲抓資料

說實話,大概兩個月之前就打算整理一下近期掌握的知識、技能——C++的socket,sql server結合Dreamweaver以及godaddy的個人建站,stm32結合液晶顯示,Multisim等的模擬……
一想起這麼多東西就覺得頭大,這次先把最近一兩天寫的一個簡單的Python爬蟲記錄一下

承一位朋友之邀,要求統計一下倫敦、里約兩屆奧運會微博來源情況,是從網頁上發微博的多還是用移動客戶端的多呢?

對此,我考慮用Python通過正則表示式來實現。

首先在新浪微博上搜索倫敦奧運會,發現每條訊息下面總會有
這裡寫圖片描述

右鍵檢視元素(順便說一下,不管是寫網頁或者是爬蟲哪怕是黑客等等跟網頁有關的東西,都推薦裝一下firfox隨時檢視程式碼什麼的,非常方便)如下:
<a target="_blank" href="http://app.weibo.com/t/feed/6vtZb0" rel="nofollow">微博 weibo.com</a>

因此決定將pattern寫為patternw = r'weibo.com'

通過
h = urllib.request.urlopen(url)
return h.read()

可以實現將頁面內容讀取為字串。這樣查詢整個網頁的字串一一比對,即可找到有多少微博是發自“weibo.com”的。

具體實現程式碼如下:

#coding=utf-8
#從新浪微博中抓取資料判斷新浪客戶端的使用情況
#只簡單示意,找出了發自網頁、iPhone和vivo的數量
#[email protected]穆沛

#<a target="_blank" href="http://app.weibo.com/t/feed/6vtZb0" rel="nofollow">微博 weibo.com</a>
#<a target="_blank" href="http://weibo.com/" rel="nofollow">晴小編iPhone 6s Plus</a> import urllib.request import re #將網頁轉為字串 def downloadPage(url): h = urllib.request.urlopen(url) return h.read() def getData(content): content = content.decode('utf-8') i = 0 w = 0 e = 0
#來自微博網頁的數量 patternw = r'weibo.com' web = re.compile(patternw) wurls = re.findall(web, content) for url in wurls: w += 1 print("w = %d"%w) #來自iPhone的數量 patterni = r'iPhone' iph = re.compile(patterni) iurls = re.findall(iph, content) for url in iurls: i += 1 print("i = %d"%i) #來自vivo的數量 patterne = r'vivo' oth = re.compile(patterne) eurls = re.findall(oth, content) for url in eurls: e += 1 print("e = %d"%e) content = downloadPage("http://s.weibo.com/weibo/%E4%BC%A6%E6%95%A6%E5%A5%A5%E8%BF%90%E4%BC%9A") getData(content)

寫的有點簡單粗暴,我相信有更好的寫法,歡迎與我交流。