構思:首先從傳送門(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
簡單來說,在取出文章后把它先切成段,再切成句子,再對句子分詞,最后把所有句子結果累加得到全文的詞頻。