摘要:先看效果環(huán)境位目標(biāo)抓取一篇報(bào)紙,并提取出關(guān)鍵字,然后按照出現(xiàn)次數(shù)排序,用在頁(yè)面上顯示出來(lái)。首先要抓取網(wǎng)頁(yè),但是網(wǎng)頁(yè)在控制臺(tái)輸出的時(shí)候,中文總是亂碼。但是不得不承認(rèn),上有很多非常優(yōu)秀的庫(kù)。例如但是這些包我在上安裝的時(shí)候總是報(bào)錯(cuò)。
先看效果:
環(huán)境win7 64位
python 3.5
目標(biāo)抓取一篇報(bào)紙,并提取出關(guān)鍵字,然后按照出現(xiàn)次數(shù)排序,用echarts在頁(yè)面上顯示出來(lái)。
工具選擇因?yàn)橹皩?duì)nodejs的相關(guān)工具比較熟悉,在用python的時(shí)候,也想有類似的工具。所以就做了一個(gè)對(duì)比的表格。
功能 | nodejs版 | python版 |
---|---|---|
http工具 | request | requests |
中文分詞工具 | node-segment, nodejieba(一直沒(méi)有安裝成功過(guò)) | jieba(分詞準(zhǔn)確度比node-segment好) |
DOM解析工具 | cheeio | pyquery(這兩個(gè)工具都是有類似jQuery那種選擇DOM的接口,很方便) |
函數(shù)編程工具 | underscore.js | underscore.py(underscore來(lái)處理集合比較方便) |
服務(wù)器 | express | flask |
感覺(jué)每個(gè)學(xué)python的人都遇到過(guò)中文亂碼的問(wèn)題。我也不例外。
首先要抓取網(wǎng)頁(yè),但是網(wǎng)頁(yè)在控制臺(tái)輸出的時(shí)候,中文總是亂碼。搞了好久,搞得我差點(diǎn)要放棄python。最終找到解決方法。 解決python3 UnicodeEncodeError: "gbk" codec can"t encode character "xXX" in position XX
過(guò)程很艱辛,但是從中也學(xué)到很多知識(shí)。
import io import sys sys.stdout = io.TextIOWrapper(sys.stoodout.buffer,encoding="gb18030")函數(shù)式編程: 順享絲滑
#filename word_rank.py import requests import io import re import sys import jieba as _jieba # 中文分詞比較優(yōu)秀的一個(gè)庫(kù) from pyquery import PyQuery as pq #類似于jquery、cheerio的庫(kù) from underscore import _ # underscore.js python版本 sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding="gb18030") # 解決控制臺(tái)中文亂碼 USELESSWORDS = ["的","要","了","在","和","是","把","向","上","為","等","個(gè)"] # 標(biāo)記一些無(wú)用的單詞 TOP = 30 # 只要前面的30個(gè)就可以了 def _remove_punctuation(line): # 移除非中文字符 # rule = re.compile("[^a-zA-Z0-9u4e00-u9fa5]") rule = re.compile("[^u4e00-u9fa5]") line = rule.sub("",line) return line def _calculate_frequency(words): # 計(jì)算分詞出現(xiàn)的次數(shù) result = {} res = [] for word in words: if result.get(word, -1) == -1: result[word] = 1 else: result[word] += 1 for word in result: if _.contains(USELESSWORDS, word): # 排除無(wú)用的分詞 continue res.append({ "word": word, "fre": result[word] }) return _.sortBy(res, "fre")[::-1][:TOP] # 降序排列 def _get_page(url): # 獲取頁(yè)面 return requests.get(url) def _get_text(req): # 獲取文章部分 return pq(req.content)("#ozoom").text() def main(url): # 入口函數(shù),函數(shù)組合 return _.compose( _get_page, _get_text, _remove_punctuation, _jieba.cut, _calculate_frequency )(url)python服務(wù)端:Flask淺入淺出
import word_rank from flask import Flask, request, jsonify, render_template app = Flask(__name__) app.debug = True @app.route("/rank") # 從query參數(shù)里獲取pageUrl,并給分詞排序 def getRank(): pageUrl = request.args.get("pageUrl") app.logger.debug(pageUrl) rank = word_rank.main(pageUrl) app.logger.debug(rank) return jsonify(rank) @app.route("/") # 主頁(yè)面 def getHome(): return render_template("home.html") if __name__ == "__main__": app.run()總結(jié)
據(jù)說(shuō)有個(gè)定律:凡是能用JavaScript寫出來(lái)的,最終都會(huì)用JavaScript寫出來(lái)。 我是很希望這樣啦。但是不得不承認(rèn),python上有很多非常優(yōu)秀的庫(kù)。
這些庫(kù)在npm上并沒(méi)有找到合適的替代品。
所以,我就想: 如何能用nodejs直接調(diào)用python的第三方庫(kù)
目前的解決方案有兩種,第一,只用nodejs的child_processes。這個(gè)方案我試過(guò),但是不太好用。
第二,npm里面有一些包,可以直接調(diào)用python的庫(kù)。例如:node-python, python.js, 但是這些包我在win7上安裝的時(shí)候總是報(bào)錯(cuò)。而且解決方法也蠻麻煩的。索性我就直接用python了。
最后附上項(xiàng)目地址:https://github.com/wangduandu...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40666.html
摘要:利用我們集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語(yǔ)料庫(kù)約含萬(wàn)字訓(xùn)練而成,模型標(biāo)注能力強(qiáng)大。據(jù)說(shuō)是最好的中文分詞組件,支持等多種語(yǔ)言。 總是看到別人用Python搞各種統(tǒng)計(jì),前端菜鳥的我也來(lái)嘗試了一把。有各種語(yǔ)義分析庫(kù)在,一切好像并不是很復(fù)雜。不過(guò)Python剛開始看,估計(jì)代碼有點(diǎn)丑。 一、兩種中文分詞開發(fā)包 thulac (http://thulac.thunlp.org/)...
馬上就要開始啦這次共組織15個(gè)組隊(duì)學(xué)習(xí) 涵蓋了AI領(lǐng)域從理論知識(shí)到動(dòng)手實(shí)踐的內(nèi)容 按照下面給出的最完備學(xué)習(xí)路線分類 難度系數(shù)分為低、中、高三檔 可以按照需要參加 - 學(xué)習(xí)路線 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...
摘要:也瀏覽過(guò)家具城的官網(wǎng),本著在一定的預(yù)算范圍之類挑選最合適的,作為一個(gè)程序猿,一顆不安分的心,決定自己爬蟲下網(wǎng)站,列出個(gè)表格,也方便給父母輩們查看,順帶再練習(xí)下爬蟲的。根據(jù)行列坐標(biāo)將數(shù)據(jù)寫入單元格。設(shè)置列寬,指定開始列位置,指定結(jié)束列位置。 原文鏈接:https://mp.weixin.qq.com/s/tQ... 家中想置辦些家具,聽朋友介紹說(shuō)蘇州蠡(li第二聲)口的家具比較出名,因...
摘要:由設(shè)計(jì),作為編程語(yǔ)言的繼承者,于年首次發(fā)布。表達(dá)式表達(dá)式是編程語(yǔ)言中的語(yǔ)法實(shí)體,可以對(duì)其進(jìn)行評(píng)估以確定其值。它是編程語(yǔ)言解釋和計(jì)算以產(chǎn)生值的常量變量函數(shù)和運(yùn)算符的組合。它在年年年和年被評(píng)為年度編程語(yǔ)言,是唯一四次獲得該獎(jiǎng)項(xiàng)的語(yǔ)言。 ...
閱讀 570·2023-04-26 02:59
閱讀 700·2023-04-25 16:02
閱讀 2174·2021-08-05 09:55
閱讀 3590·2019-08-30 15:55
閱讀 4682·2019-08-30 15:44
閱讀 1811·2019-08-30 13:02
閱讀 2209·2019-08-29 16:57
閱讀 2297·2019-08-26 13:35