安裝相關套件


In [ ]:
!sudo pip install jieba
!sudo pip install BeautifulSoup4

欲抓的網頁列表


In [5]:
# urllist = ['http://lohas.pixnet.net/blog/post/31969271',
#            'http://lohas.pixnet.net/blog/post/32286983',
#            'http://lohas.pixnet.net/blog/post/31423623',
#            'http://lohas.pixnet.net/blog/post/31466711',
#            'http://lohas.pixnet.net/blog/post/40148737',
#           ]
f = open('./raindog.csv')
urllist = []
for url in f :
    urllist.append(url)

下載網頁並且組成一個檔案


In [8]:
import urllib2
import json
f = open('./raingod.txt',"w")

for u in urllist:
    try:
        line = {}
        response = urllib2.urlopen(u)
        html = response.read()
        html = html.replace('\r','').replace('\n','')
        line['html'] = html
        line['url'] =u

        line_str = json.dumps(line)
        print '*',
        f.write(line_str+"\r\n")
    except :
        print "Error At:" , u
f.close()


 * * * * * * * * * * * * * * * * * * * * Error At: http://raindog.pixnet.net/blog/post/33470980-%e5%b0%8f%e8%98%bf%e8%8e%89%e7%95%b6%e5%a7%90%e5%a7%90%e4%ba%86

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Error At: http://raindog.v6.pixnet.net/blog/post/26262754-%e8%91%89%e7%8e%b2%e8%a3%b8%e6%8b%8d%e3%80%8a3d%e7%8e%89%e8%92%b2%e5%9c%98%e3%80%8b

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Error At: http://raindog.v6.pixnet.net/blog/post/29306256-%e4%bb%b2%e6%9d%91%e7%be%8e%e5%84%aa%e5%85%a8%e8%a3%b8%e9%9c%b2%e6%af%9b%e5%af%ab%e7%9c%9f%e5%85%ac%e9%96%8b%ef%bc%81

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Error At: http://raindog.v6.pixnet.net/blog/post/21544984-%e5%bd%9d%e6%97%8f%e7%9a%84%e8%be%b2%e6%ad%b7%e4%b8%83%e6%9c%88%e5%8d%81%e4%ba%94

* * * * * * * * * * * * * * * * * * * * * * Error At: http://raindog.pixnet.net/blog/post/26374241-%e7%af%80%e5%88%86%e8%a6%81%e5%90%83%e6%83%a0%e6%96%b9%e5%8d%b7

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Error At: http://raindog.v6.pixnet.net/blog/post/33576304-bambino%e7%9a%84%e9%9f%93%e5%bc%8f%e9%ae%91%e9%ad%9a%e6%96%99%e7%90%86

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Error At: http://raindog.v6.pixnet.net/blog/post/29498681-%e3%80%8afhm%e3%80%8b2012%e6%9c%88%e6%9b%86

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

我們來看一下實際檔案的內容

請點即此鏈結

載入頁面,並進行 json parsing


In [ ]:
import json
pixnet = sc.textFile('./pixnet.txt',use_unicode=False).map(
    lambda x : json.loads(x)).map(lambda x : (x['url'],x['html']))

print "URL:", pixnet.first()[0]
print
print "HTML 前 200 字元:", pixnet.first()[1][:200]

RDD 常用的 Function 如下

  • map(funct) - 對 RDD 的裡頭的元素進行處理動作
  • mapValues (func) - 排除 Key,只對 RDD 的裡頭的元素進行處理動作
  • reduceByKey(func) - 將相同的 Key 裡頭的 Values 給予合併起來
  • count() - 計算 RDD 裡頭元素的個數
  • filter(func) - 根據 condition 判斷是否需要保留
  • first() - 取得 RDD 裡頭的第一個元素

請填入??,來計算"好吃"的次數(多少頁面之中)


In [ ]:
count_nummber = pixnet.filter(lambda x : u"??" in x[1] ).??
if count_nummber == 5 : print "你答對了"

請修改以下的程式碼,並計算"很好"所有出現次數,注意!!不是頁面數

提示:修改 word_count 函式


In [ ]:
def word_count(text):
    
    return text.count(u"很好")

print "很好出現了",word_count(u"老師很好很好很好很好!!!!"),"次"

In [ ]:
pixnet.mapValues(word_count).collect()
total_count = pixnet.mapValues(word_count).map(lambda x : x[1]).??? if total_count == 73 : print "你答對了"