我正在尝试编写一个用于从博客文章和网站中提取文章文本的通用函数。如何从网站/博客中提取文章内容
一些简化的例子,我想能够处理:
随机网站:
...
<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>
我想出了什么(DOC是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
它的工作原理比较好,因为我与测试的例子,但它仍然留下了一些分享和导航链接再加上如果一个页面使用了更神秘的类名,它不会工作。
有没有更好的方法来做到这一点?
我投票结束这个题目,因为它属于http://codereview.stackexchange.com –
它不是真的关于代码审查,更多关于网页抓取技术和/或图书馆的人谁不这样做专业可能不知道。由于这是一个悬而未决的问题,它看起来并没有明确的答案,我会接受我收到的答案之一。 – makhan
由于工具和图书馆的建议,这将成为题外话题。 –