从存储的.html页面

时间:2015-05-20 17:03:42

标签: python urllib2 bs4

我正在从html文件中读取文本并进行一些分析。这些.html文件是新闻文章。

代码:

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

现在我只想要文章内容,而不是广告,标题等其他文本。我怎样才能在python中相对准确地做到这一点?

我知道一些像Jsoup(java api)和bolier这样的工具,但我想在python中这样做。我可以使用bs4找到一些技术,但仅限于一种类型的页面。我有来自众多来源的新闻页面。此外,还缺少任何示例代码示例。

我在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

5 个答案:

答案 0 :(得分:10)

Newspaper越来越受欢迎,我只是在表面上使用它,但看起来不错。它只是Python 3。

快速入门仅显示来自网址的加载,但您可以load from a HTML string使用:

import newspaper

# LOAD HTML INTO STRING FROM FILE...

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

答案 1 :(得分:9)

Python中也有这样的库:)

由于您提到了Java,因此有一个用于samppipe的Python包装器,允许您在python脚本中直接使用它:https://github.com/misja/python-boilerpipe

如果你想使用纯粹的python库,有两个选项:

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

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

在这两者中,我更喜欢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

答案 2 :(得分: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/

答案 3 :(得分:1)

有许多方法可以在Python中组织html-scaraping。正如其他答案所述,工具#1是BeautifulSoup,但还有其他一些:

以下是有用的资源:

没有找到文章内容的通用方法。 HTML5具有文章标签,暗示主要文本,并且可能可以调整来自特定发布系统的页面的抓取,但是没有通用的方法来获得准确猜测文本位置。 (从理论上讲,机器可以推断出页面结构不同于一个结构相同,不同的内容文章,但这可能超出了范围。)

Web scraping with Python也可能是相关的。

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()

答案 4 :(得分:0)

您可以使用htmllibHTMLParser来解析您的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页面

获取的代码示例