一、正文抽取地址html
https://github.com/buriy/python-readabilitypython
【安裝】git
pip install readability-lxmlgithub
【測試】web
python -m readability.readability -ujson
http://www.douban.com/note/320982627/app
【PATH依賴】python2.7
export PYTHONPATH=/usr/local/lib/python2.7/site-packagestornado
必須是2.7的PYTHON,因此必須這麼搞,還得看看怎麼讓PYTHON2.7和PYTHON3.3共存工具
=============================================================================
二、官方例子
from readability.readability import Documentimport urllibhtml = urllib.urlopen(url).read()readable_article =Document(html).summary()readable_title = Document(html).short_title()
==============================================================================
三、清理HTML
項目地址
https://github.com/aaronsw/html2text
【安裝】
pip install html2text
【代碼】
# -*- coding: utf-8 -*-import html2textprint html2text.html2text(u'<html><body><div><div class="note" id="link-report"><p>(1)網頁去噪</p><p>網頁去噪須要去掉與網頁內表達內容不相關的文字,如廣告,評論等等。如今對於博客、新聞類的網頁去噪已經有不少的應用,好比經常使用的印象筆記、有道筆記就用到了相關的技術。</p><p>由於項目的須要,也須要對網頁進行去噪,留下有用的內容。因此在網上找了相關的網頁去噪的開源項目。</p><p>(2)參考連接</p><p>主要參考的連接是這篇「網頁正文抽取工具」, 應該是抓取的新浪weibo上的相關的微博內容。裏面介紹了給出了項目的地址,有Java、C++、C#、Perl、Python的。</p><p>由於項目是Python寫的,因此初步選定使用 Decruft , Python readability , Python boilerpipe ,Pyhon Goose這幾種。</p><p>(3)實踐操做</p><p>Python readability的使用:</p><p>from readability.readability import Document</p><p>import urllib</p><p>html = urllib.urlopen(url).read()</p><p>readable_article = Document(html).summary()</p><p>readable_title = Document(html).short_title()</p><p>最後抽取出來的readable_article是帶HTML標籤的文本。還須要進行clean html操做。若是須要獲得純文本內容,還須要作其餘工做</p><p>「decruft is a fork of python-readability to make it faster. It also has some logic corrections and improvements along the way.」 (引自:</p><a rel="nofollow" href="http://www.minvolai.com/blog/decruft-arc90s-readability-in-python/" target="_blank">http://www.minvolai.com/blog/decruft-arc90s-readability-in-python/</a><p>)</p><p>decruft是Python readability的fork版本,其主要提升了readability的速度。decruft的源碼是放在Goolge上的,發現他只有0.1版本,並且是10年9月的,可是Python-readability一直在更新的,其核心的readability.py是7個月前更新的,因此不能保證decruft的性能要比如今的readability好,我沒有下載decruft進行試驗,有興趣能夠本身試驗一下。</p><p>Python-boilerpipe:是Boilerpipe的Python版本的Warpper,在使用的時候須要依賴jpype, chardet. 在構造Extractor的時候能夠定製本身須要的抽取器,具體有:</p><p>DefaultExtractor</p><p>ArticleExtractor</p><p>ArticleSentencesExtractor</p><p>KeepEverythingExtractor</p><p>KeepEverythingWithMinKWordsExtractor</p><p>LargestContentExtractor</p><p>NumWordsRulesExtractor</p><p>CanolaExtractor</p><p>這個項目能夠本身選擇抽取出的正文內容格式:能夠是純文本的,也能夠是攜帶HTML的。</p><p>Python-Goose:</p><p>通過試驗,決定使用Goose,能夠在這個網址上測試 </p><a rel="nofollow" href="http://jimplush.com/blog/goose" target="_blank">http://jimplush.com/blog/goose</a><p> Goose的抽取效果。Goose還可以得到Meta description。</p><p>Goose最後能夠得到抽取後的純文本。</p></div></div></body></html>')
==============================================================================
四、優化抓取
http://www.python-requests.org/en/latest/
【安裝】
pip install requests
【使用】
import requests
r = requests.get(‘
https://github.com/timeline.json’)
還能夠發起其它幾種的req
>>> r = requests.put(」
>>> r = requests.delete(」
>>> r = requests.head(」
>>> r = requests.options(」
r.text
u'[{「repository」:{「open_issues」:0,」url」:」
【POST請求】
>>> payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
>>> r = requests.post(」
http://httpbin.org/post」, data=payload)
>>> print r.text
{
…
「form」: {
「key2」: 「value2」,
「key1」: 「value1」
},
…
}
==============================================================================
五、PYTHON3.3和PYTHON2.7的共存?
export PYTHONPATH=/usr/local/lib/python3.3/site-packages
==============================================================================
六、關鍵詞提取
【項目地址】
https://github.com/isnowfy/snownlp
【安裝】
pip install snownlp
【使用】
from snownlp import SnowNLP
text = u」’
天然語言處理是計算機科學領域與人工智能領域中的一個重要方向。
它研究能實現人與計算機之間用天然語言進行有效通訊的各類理論和方法。
天然語言處理是一門融語言學、計算機科學、數學於一體的科學。
所以,這一領域的研究將涉及天然語言,即人們平常使用的語言,
因此它與語言學的研究有着密切的聯繫,但又有重要的區別。
天然語言處理並非通常地研究天然語言,
而在於研製能有效地實現天然語言通訊的計算機系統,
特別是其中的軟件系統。於是它是計算機科學的一部分。
」’
s = SnowNLP(text)
s.keywords(3) # [u’語言’, u’天然’, u’計算機’]
==============================================================================
七、包裝成HTTP服務
二、代碼
# -*- coding: utf-8 -*-
import tornado.ioloop
import tornado.web
import json
import html2text
import requests
from readability.readability import Document
from snownlp import SnowNLP
class MainHandler(tornado.web.RequestHandler):
def get(self):
url = self.get_argument(‘url’)
html = requests.get(url).content
summary = Document(html).summary()
text = html2text.html2text(summary);
s = SnowNLP(text)
keywords = s.keywords(3)
self.write(json.dumps(keywords,ensure_ascii=False))
application = tornado.web.Application([
(r」/」, MainHandler),
])
if __name__ == 「__main__」:
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
==================================
三、客戶端測試用代碼:
代開console
var xhr = new XMLHttpRequest();
var fd = new FormData();
fd.append(‘text’, 「咱們都在不斷趕路」);
xhr.open(‘POST’, ‘
http://localhost:8888′, true);
xhr.send(fd);
原文地址:https://www.douban.com/note/320990848/
轉載請註明:方法SEO顧問 » 【Python】提取網頁正文內容的相關模塊與技術