如何从 website/blog 中提取文章内容
How to extract article content from a website/blog
我正在尝试编写一个通用函数,用于从博客文章和网站中提取文章文本。
一些我希望能够处理的简化示例:
随机网站:
...
<div class="readAreaBox" id="readAreaBox">
<h1 itemprop="headline">title</h1>
<div class="chapter_update_time">time</div>
<div class="p" id="chapterContent">article text</div>
</div>
...
WordPress:
<div id="main" class="site-main">
<div id="primary" class="site-content" role="main">
<div id="content" class="site-content" role="main">
<article id="post-1234" class="post-1234 post type-post">
<div class="entry-meta clear">..</div>
<h1 class="entry-title">title</h1>
<div class="entry-content clear">
article content
<div id="jp-post-flair" class="sharedaddy">sharing links</div>
</div>
</article>
</div>
</div>
</div>
Blogspot:
<div id="content">
...
<div class="main" id="main">
<div class="post hentry">
<h3 class="post-title">title</h3>
<div class="post-header">...</div>
<div class="post-body">article content</div>
<div class="post-footer">...</div>
</div>
</div>
</div>
我想出了什么(文档是Nokogiri::HTML::Document
):
def fetch_content
html = ''
['#content', '#main', 'article', '.post-body', '.entry-content', '#chapterContent'].each do |css|
candidate = doc.css(css).to_html
html = [html, candidate].select(&:present?).sort_by(&:length).first
end
self.content = html
end
它在我测试过的示例中效果相对较好,但它仍然会留下一些共享和导航链接,而且如果页面使用更隐蔽的 class 名称,它也不会起作用。
有更好的方法吗?
有一个名为 pismo 的 gem 实现了一些尝试提取文章内容的算法。
有一个 java 库 boilerpipe,您可以从 JRuby 中提取网页的文本内容。
使用 rapar 这可以方便地编写领域特定的解析器,如 wordpress.com、blogspot.com 等
您也可以使用免费文章提取API,例如:
diffbot.com
embed.ly
textracto.com
其中一些工作得很好,据我所知,它们都很容易与 Ruby 集成。
我正在尝试编写一个通用函数,用于从博客文章和网站中提取文章文本。
一些我希望能够处理的简化示例:
随机网站:
...
<div class="readAreaBox" id="readAreaBox">
<h1 itemprop="headline">title</h1>
<div class="chapter_update_time">time</div>
<div class="p" id="chapterContent">article text</div>
</div>
...
WordPress:
<div id="main" class="site-main">
<div id="primary" class="site-content" role="main">
<div id="content" class="site-content" role="main">
<article id="post-1234" class="post-1234 post type-post">
<div class="entry-meta clear">..</div>
<h1 class="entry-title">title</h1>
<div class="entry-content clear">
article content
<div id="jp-post-flair" class="sharedaddy">sharing links</div>
</div>
</article>
</div>
</div>
</div>
Blogspot:
<div id="content">
...
<div class="main" id="main">
<div class="post hentry">
<h3 class="post-title">title</h3>
<div class="post-header">...</div>
<div class="post-body">article content</div>
<div class="post-footer">...</div>
</div>
</div>
</div>
我想出了什么(文档是Nokogiri::HTML::Document
):
def fetch_content
html = ''
['#content', '#main', 'article', '.post-body', '.entry-content', '#chapterContent'].each do |css|
candidate = doc.css(css).to_html
html = [html, candidate].select(&:present?).sort_by(&:length).first
end
self.content = html
end
它在我测试过的示例中效果相对较好,但它仍然会留下一些共享和导航链接,而且如果页面使用更隐蔽的 class 名称,它也不会起作用。
有更好的方法吗?
有一个名为 pismo 的 gem 实现了一些尝试提取文章内容的算法。
有一个 java 库 boilerpipe,您可以从 JRuby 中提取网页的文本内容。
使用 rapar 这可以方便地编写领域特定的解析器,如 wordpress.com、blogspot.com 等
您也可以使用免费文章提取API,例如:
diffbot.com
embed.ly
textracto.com
其中一些工作得很好,据我所知,它们都很容易与 Ruby 集成。