web-dev-qa-db-ja.com

保存された.htmlページからニュース記事のコンテンツを抽出します

私はhtmlファイルからテキストを読み、いくつかの分析を行っています。これらの.htmlファイルはニュース記事です。

コード:

 html = open(filepath,'r').read()
 raw = nltk.clean_html(html)  
 raw.unidecode(item.decode('utf8'))

今、私は記事の内容だけが欲しいので、広告や見出しなどの残りのテキストは必要ありません。Pythonで比較的正確にこれを行うにはどうすればよいですか?

Jsoup(a Java api)や bolier のようなツールをいくつか知っていますが、Pythonでそうしたいのですが、 bs4 ただし、1つのタイプのページに限定されています。また、多数のソースからのニュースページがあります。また、サンプルコードの例が不足しています。

私はこのようなものを探しています http://www.psl.cs.columbia.edu/wp-content/uploads/2011/03/3463-WWWJ.pdf Python。

編集:理解を深めるために、次のリンク http:// wwwのコンテンツを抽出するサンプルコードを記述してください。 nytimes.com/2015/05/19/health/study-finds-dense-breast-tissue-isnt-always-a-high-cancer-risk.html?src=me&ref=general

13
Abhishek Bhatia

Python too :)にこのためのライブラリがあります

Javaについて言及したので、ボイラーパイプ用のPythonラッパーがあり、pythonスクリプト内で直接使用できます: https:// github .com/misja/python-boilerpipe

純粋にpythonライブラリを使用する場合は、次の2つのオプションがあります。

https://github.com/buriy/python-readability

そして

https://github.com/grangier/python-goose

2つのうち、私はGooseを好みますが、最近のバージョンでは何らかの理由でテキストを抽出できない場合があることに注意してください(今のところバージョン1.0.22を使用することをお勧めします)

編集:これはGooseを使用したサンプルコードです:

from goose import Goose
from requests import get

response = get('http://www.nytimes.com/2015/05/19/health/study-finds-dense-breast-tissue-isnt-always-a-high-cancer-risk.html?src=me&ref=general')
extractor = Goose()
article = extractor.extract(raw_html=response.content)
text = article.cleaned_text
10
oxymor0n

新聞 人気が高まっており、表面的にしか使っていませんが、見た目は良さそうです。 Python 3のみです。

クイックスタートにはURLからの読み込みのみが表示されますが、次の方法で HTML文字列から読み込み できます。

import newspaper

# LOAD HTML INTO STRING FROM FILE...

article = newspaper.Article('') # STRING REQUIRED AS `url` ARGUMENT BUT NOT USED
article.set_html(html)
14
Harry

このページに直接アクセスして、次のようなことを試してください。

##Import modules
from bs4 import BeautifulSoup
import urllib2


##Grab the page
url = http://www.example.com
req = urllib2.Request(url)
page = urllib2.urlopen(req)
content = page.read()
page.close()  

##Prepare
soup = BeautifulSoup(content) 

##Parse (a table, for example)

for link in soup.find_all("table",{"class":"myClass"}):
    ...do something...
pass

ファイルをロードしたい場合は、代わりにページを取得した部分をファイルに置き換えてください。詳細はこちら: http://www.crummy.com/software/BeautifulSoup/bs4/doc/

1
datasci

Pythonでhtml-scarapingを整理する方法はたくさんあります。他の回答で述べたように、ツール#1はBeautifulSoupですが、他にもあります。

役立つリソースは次のとおりです。

記事の内容を見つける普遍的な方法はありません。 HTML5には、メインテキストを示唆する記事タグがあり、特定の発行システムからのページのスクレイピングを調整することは可能かもしれませんが、テキストの場所を正確に推測する一般的な方法はありません。 (理論的には、マシンは、コンテンツ記事が異なる、構造的に同一の複数のページ構造を推測できますが、これはおそらくここでは範囲外です。)

また、 Pythonを使用したWebスクレイピング が関連している可能性があります。

NYTのPyqueryの例:

from pyquery import PyQuery as pq
url = 'http://www.nytimes.com/2015/05/19/health/study-finds-dense-breast-tissue-isnt-always-a-high-cancer-risk.html?src=me&ref=general'
d = pq(url=url)
text = d('.story-content').text()
1
Roman Susi

htmllib または HTMLParser を使用できます。これらを使用してhtmlファイルを解析できます。

from HTMLParser import HTMLParser

# create a subclass and override the handler methods
class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print "Encountered a start tag:", tag
    def handle_endtag(self, tag):
        print "Encountered an end tag :", tag
    def handle_data(self, data):
        print "Encountered some data  :", data

# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')

HTMLParserページから取得したコードのサンプル

0
MaoKnight