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