构思:首先从传送门(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
简单来说,在取出文章后把它先切成段,再切成句子,再对句子分词,最后把所有句子结果累加得到全文的词频。