我正在从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
答案 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)
您可以使用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页面
获取的代码示例