小目標——基于熱門公眾號文章的詞頻分析

構思:首先從傳送門(or Sogou微信搜索)里爬取熱門公眾號文章,然后通過結巴分詞將全文分詞,最后進入數據庫進行分析詞頻。

首先構建環(huán)境,略。

然后,先做爬蟲(不會scrapy即便看他文檔很多回了)。

這里貼上來兩個爬取的Function。

def pullLatestHotArticles():
    ''' 全部文章中 的 熱門 '''
    url = "http://werank.cn/"
    urlList = []
    html = requests.get(url).text
    et = etree.HTML(html)
    list = et.xpath("http://table/tbody/tr/td[2]/a")
    for element in list :
        urlList.append(element.attrib["href"])
    print "already get all urls"
    return urlList
def pointedWechatOfficialAccountsArticles(wechatOfficialAccountName):
    ''' 指定威信公眾號 文章'''
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0',
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
      'Accept-Encoding': 'gzip, deflate',
      'Connection': 'keep-alive',
      'Cache-Control': 'max-age=0',
    }
    urlList = []
    i = 0
    while i >= 0 :
        url = "http://chuansong.me/account/" + wechatOfficialAccountName + "?start=" + str(i)
        html = requests.get(url, headers=headers).text
        etree_html = etree.HTML(html)
        list = etree_html.xpath("http://h2/span/a")
        for element in list :
            urlList.append("chuansong.me" + element.attrib["href"])
        if len(list) < 12 :
            break
        i = i + 12
    return urlList

至于把文章放進MongoDB的過程,我就不貼出來了,如果文章少完全不用放進NoSQL,放文件里放關系型數據庫或直接遞交給分析器都可以。

不得不說下感謝傳送門的站長……好平臺啊……

然后就是用我們的分析器來取出文章,分析瓷瓶詞頻

同樣,我們也不說怎么取了……

最后就是關鍵的瓷瓶分析


今天是2017年10月6日……

Totally忘了這篇還沒寫完……

把最后的詞頻分析簡單的說下吧,其實很簡單。

首先我們要認識Python的一個庫,collections。collections是Python內建的一個集合模塊,提供了許多有用的集合類。其中就有個簡單的計數器,Counter函數,這樣我們就不用自己手寫計數器了。

最后大致就是這樣

def cleanArticle(articleContent=""):
    madeup = []
    a = collections.Counter()
    paragraphs = articleContent.split("\n")
    paragraphs =  list(set(paragraphs))
    if "" in paragraphs:
        paragraphs.remove("")
    for paragraph in paragraphs:
        sentences = paragraph.split(" ")
        sentences =  list(set(sentences))
        if "" in sentences:
            sentences.remove("")
        # print sentences
        # print "\n"
        for sentence in sentences:
            a += collections.Counter(list(jieba.cut(sentence)))
    return a

簡單來說,在取出文章后把它先切成段,再切成句子,再對句子分詞,最后把所有句子結果累加得到全文的詞頻。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容