簡單的Python爬蟲抓資料
阿新 • • 發佈:2018-12-30
說實話,大概兩個月之前就打算整理一下近期掌握的知識、技能——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)
寫的有點簡單粗暴,我相信有更好的寫法,歡迎與我交流。