14

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

コード:

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

今、広告や見出しなどの残りのテキストではなく、記事のコンテンツだけが必要です.Pythonで比較的正確に行うにはどうすればよいですか?

Jsoup(Java API) やbolierなどのツールをいくつか知っていますが、Python でやりたいと思っています。bs4を使用していくつかの手法を見つけることができましたが、1 つのタイプのページに限定されていました。また、多数の情報源からのニュース ページがあります。また、存在するサンプル コードの例が不足しています。

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

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

4

5 に答える 5

16

新聞はますます人気が高まっています。私は表面的にしか使用していませんが、良さそうです。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)
于 2016-11-22T23:21:12.320 に答える
12

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

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

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

https://github.com/bury/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
于 2015-05-20T18:00:56.187 に答える
1

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()
于 2015-05-20T17:31:49.317 に答える
1

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

##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/

于 2015-05-20T17:17:17.590 に答える
0

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 ページから取得したコードのサンプル

于 2015-05-20T17:09:21.367 に答える