小目标——基于热门公众号文章的词频分析

构思:首先从传送门(or Sogou微信搜索)里爬取热门公众号文章,然后通过结巴分词将全文分词,最后进入数据库进行分析词频。

首先构建环境,略。

然后,先做爬虫(不会scrapy即便看他文档很多回了)。

这里贴上来两个爬取的Function。

def pullLatestHotArticles():
    ''' 全部文章中 的 热门 '''
    url = "http://werank.cn/"
    urlList = []
    html = requests.get(url).text
    et = etree.HTML(html)
    list = et.xpath("//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("//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

简单来说,在取出文章后把它先切成段,再切成句子,再对句子分词,最后把所有句子结果累加得到全文的词频。

你可能感兴趣的:(小目标——基于热门公众号文章的词频分析)