1. 程式人生 > >python爬蟲——對爬到的數據進行清洗的一些姿勢(5)

python爬蟲——對爬到的數據進行清洗的一些姿勢(5)

weibo 英雄 mina ret term creators 刪除 動畫 任務

  做爬蟲,當然就要用數據。想拿數據進行分析,首先清洗數據。這個清洗數據包括清除無用數據列和維度,刪除相同數據,對數據進行勘誤之類的。

  從各大不同新聞網站可以爬到重復新聞。。。這個可以有。之前為了對爬到的新聞信息進行深度挖掘去了這個網站http://blog.reetsee.com/archives/237雖說沒有對數據進行更進一步的挖掘,好歹有處理數據。處理重復新聞可以使用python結巴分詞。統計分詞信息,詞典差距過大,詞典頻度比差距過大,都可以算不同新聞。

  對新聞內容字符串進行檢查需要這3種操作:提取分詞,統計頻度和查重。

  提取分詞函數:

技術分享
def ExtractTagsFromContent(content, num_of_tags):
    tags 
= jieba.analyse.extract_tags(content, topK = num_of_tags) return tags
View Code

  統計頻度函數:

技術分享
def GetTermFreqFromContent(tags, content):
    tfdict = {}
    for tag in tags:
        tfdict[tag] = 0 #把已出現的詞頻度初始化為0

    seg_list = jieba.cut(content) #把新聞內容切分成詞
    has_words = False
    for word in seg_list:
        
if tfdict.has_key(word): tfdict[word] = tfdict[word] + 1 #統計頻度 has_words = True if has_words: return tfdict else: return None
View Code

  余弦相似度函數:

技術分享
def CosinSimilarity(vector1, vector2):
    if len(vector1) != len(vector2):
        print "Error: vector1:
" + vector1 + " and vector2: " + vector2 + "have different dimensions" return None numerator = 0.0 v1_square = 0.0 v2_square = 0.0 for i in range(0, len(vector1)): numerator += vector1[i] * vector2[i] v1_square += vector1[i] * vector1[i] v2_square += vector2[i] * vector2[i] denominator = math.sqrt(v1_square * v2_square) if denominator == 0: return None else: return numerator / denominator
View Code

  查重函數:

技術分享
def FindSimilarPassageFromSet(news_set, example_tf):
    heap = []
    tags = []
    for tag in example_tf.keys():
        tags.append(tag)

    for file_path in news_set:
        tf = GetTermFreqFromFile(tags, file_path)
        if tf == None:
            continue
        similarity = CosinSimilarityForDict(example_tf, tf)
        # 插入堆
        if not similarity == None:
            heap.append(SimilarPassage(similarity * -1.0, file_path))
    # 把最高相似度彈出(有*-1的關系,最小彈出實際是最大彈出)
    heapq.heapify(heap)
    if len(heap) == 0:
        return None
    result = heapq.heappop(heap)
    if result.Relevant():
        print "Similarity: " + str(result.similarity)
        news_set.discard(result.file_path)
        return result.file_path
    else:
        return None
View Code

  然後新聞就成功去重了。

  爬新浪微博的數據,wap端比較容易爬,而且數據也較為純凈。

  不過根據關鍵詞爬出來的數據還是有些奇怪的:

技術分享
:春季番最新銷量:《機甲少女》熱賣 《櫻花任務》暴死  被認為是“買手辦送光碟”的《機甲少女FRAME ARMS GIRL》第1卷不負眾望取得了好成績。而P.A.WORKS動畫公司繼《花開伊呂波》《白箱》之後的第三部工作題材動畫《櫻花任務》銷量僅為1392張,在春季番中屬於墊底。<br/>2017年春季番銷量及排名情況(截止2017年7月23日)<br/><br/>第1名:《碧藍幻想》 53571張<br/><br/>第2名:《偶像大師 灰姑娘女孩劇場》 42959張<br/><br/>第3名:《埃羅芒阿老師》 10417張<br/><br/>第4名:《高校星歌劇》第2季 9827張<br/><br/>第5名:《機甲少女FRAME ARMS GIRL》 7614張<br/><br/>第6名:《進擊的巨人》第2季 7525張<br/><br/>第7名:《王室教師海涅》 6532張<br/><br/>第8名:《夏目友人帳》第6季 4862張<br/><br/>第9名:《我的英雄學院》第2季 4145張<br/><br/>第10名:《sin七大罪》 3305張<br/><br/>第11名:《Re:CREATORS》 2631張<br/><br/>第12名:《不正經的魔術講師與禁忌教典》 2485張<br/><br/>第13名:《末日時在做什麽?有沒有空?可以來拯救嗎?》 1674張<br/><br/>第14名:《劍姬神聖譚》 1656張<br/><br/>第15名:《武裝少女》 1425張<br/><br/>第16名:《櫻花任務》 1392張<br/><br/>第17名:《時鐘機關之星》 896張<br/><br/>第18名:《怪怪守護神》 834張<br/><br/>第19名:《覆面系Noise》 823張<br/><br/>第20名:《喧嘩番長乙女》 673張<br/><br/>第21名:《戀愛暴君》 556張
我說的是任天堂的遊戲arms... 技術分享
:可惜,lost stars沒有音頻版的,不能更好聽!實力唱將!幸好,open arms有啊<a href="/n/M%E9%B9%BFM">@M鹿M</a><a href="https://weibo.cn/sinaurl?f=w&amp;u=http%3A%2F%2Ft.cn%2FRorgJGY&amp;ep=FerXXxPbm%2C1763629124%2CFerXXxPbm%2C1763629124">觸發(Set it off)</a> 打榜就行!<a href="http://weibo.cn/pages/100808topic?extparam=%E4%BA%9A%E6%B4%B2%E6%96%B0%E6%AD%8C%E6%A6%9C&amp;from=feed">#亞洲新歌榜#</a> 現在參與打榜,還有機會獲得8月27日舉辦的亞洲新歌榜2017年度盛典門票! ???
看來arms這個關鍵詞太有歧義了 技術分享
:發售中的Switch平臺遊戲《ARMS》公開全新TVCM,在近日任天堂公開的Q1財報中《ARMS》成功突破百萬銷量,期待今後的表現。[鼓掌] <a href="https://weibo.cn/sinaurl?f=w&amp;u=http%3A%2F%2Ft.cn%2FR9yV0Fz&amp;ep=FerBM7lQy%2C1764127957%2CFerBM7lQy%2C1764127957">秒拍視頻</a> ???
有個正常的了。。。不過後面的話題符號明顯就是在搗亂 技術分享
:<a href="http://weibo.cn/pages/100808topic?extparam=%E5%AD%A6%E5%AD%90%E9%A3%8E%E9%87%87&amp;from=feed">#學子風采#</a> 【厲害了, 集大學子獲第41屆ACM國際大學生程序設計競賽亞洲區域賽銅獎】日前,ACM/ICPC(國際大學生程序設計競賽)亞洲區域賽在青島落下帷幕。北京大學、復旦大學、武漢大學、廈門大學等115所高校的186支代表隊參賽。經過激烈角逐,由我校計算機工程學院2014級學生吳曉仁、闞航、陳明振組成的集大ACM集訓隊(指導教師:林陽斌)獲得一枚銅牌。<br/><br/>  ACM國際大學生程序設計競賽(簡稱ACM-ICPC)是由國際計算機界具有悠久歷史的權威性組織ACM學會(Association for Computing Machinery)主辦,世界上公認的規模最大、水平最高、參與人數最多的國際大學生程序設計競賽,被業界稱為IT界的“奧林匹克”競賽。 <a href="/n/%E9%9B%86%E5%A4%A7%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%B7%A5%E7%A8%8B%E5%AD%A6%E9%99%A2%E5%AD%A6%E7%94%9F%E4%BC%9A">@集大計算機工程學院學生會</a>
後面那段人人皆知的介紹能不能去掉啊。。。 技術分享
:ACM-ICPC競賽算法類型 - 海島Blog - CSDN博客 <a href="https://weibo.cn/sinaurl?f=w&amp;u=http%3A%2F%2Ft.cn%2FRK1sG4m&amp;ep=FdolV9DkF%2C6286510827%2CFdolV9DkF%2C6286510827">http://t.cn/RK1sG4m</a> ???
一看就知道這只是博客文章的入口。。。如果標題不對,想除雜就更麻煩了 技術分享
:【我校學子在ACM國際大學生程序設計競賽全國邀請賽上摘金】2017年5月,ACM國際大學生程序設計競賽(ACM-ICPC)全國邀請賽在西北工業大學舉行。由我校學生李誌遠、徐經緯、陳笑天三名同學組成的隊伍“challenge”奪得金獎,捧回了我校歷史上的第一枚ACM-ICPC金牌。詳情可見<a href="https://weibo.cn/sinaurl?f=w&amp;u=http%3A%2F%2Ft.cn%2FRol0sxX&amp;ep=F9Vlbao8b%2C1845850033%2CF9Vlbao8b%2C1845850033">http://t.cn/Rol0sxX</a> ???
詳情的數據是否有用?要不要特意再寫一次分析策略? 技術分享
:【我校學子在ACM國際大學生程序設計競賽全國邀請賽上摘金】2017年5月,ACM國際大學生程序設計競賽(ACM-ICPC)全國邀請賽在西北工業大學舉行。由我校學生李誌遠、徐經緯、陳笑天三名同學組成的隊伍“challenge”奪得金獎,捧回了我校歷史上的第一枚ACM-ICPC金牌。詳情可見<a href="https://weibo.cn/sinaurl?f=w&amp;u=http%3A%2F%2Ft.cn%2FRol0sxX&amp;ep=F9Vlbao8b%2C1845850033%2CF9Vlbao8b%2C1845850033">http://t.cn/Rol0sxX</a> ???
搜索結果收錄了2次。。。 技術分享
:等等,考慮到今後將推出的遊戲,難不成NB社Switch上第三方一哥?回想起來馬車8dx和arms後面都有對NBGI的特別鳴謝,真是可怕極了 <a href="https://weibo.cn/sinaurl?f=w&amp;u=http%3A%2F%2Ft.cn%2FRU14lZk&amp;ep=FeUqn8BXP%2C1886986281%2CFeUqn8BXP%2C1886986281">日本·橫濱</a> ???
要不要把地址也作為變量錄入呢?

  上面的問題只是一部分。。。如果爬其他數據還會有更多的問題要考慮。有空再考慮一下清洗策略

python爬蟲——對爬到的數據進行清洗的一些姿勢(5)