从网页中删除所有可见文本

时间:2014-11-06 12:06:12

标签: ruby web-scraping capybara nokogiri

是否有一种简单的方法来解析HTML页面以获取用户可见的文本? 我想摆脱所有标签,链接,JavaScript并返回页面上的文本内容。

我只是想存储信息并稍后再回来,但在搜索中使用它。

尝试了Nokogiri和Capybara / Poltergeist

doc.css('body').text

但这给了我各种各样的JavaScript和垃圾,我宁愿看不到。

是否有办法剥离文本并将其批量处理为字符串而忽略所有“代码”?

3 个答案:

答案 0 :(得分:2)

如果您想获得真实用户获得的文本,请模拟真实用户。一种方法是使用像PhantomJS这样的东西来使用Watir-Webdriver,例如:

require 'watir-webdriver'

browser = Watir::Browser.new :phantomjs
browser.goto 'https://google.com'
puts browser.body.text

当然,要使其工作(PhantomJS具体),您需要下载相应JS(PhantomJS Downloads)的文件并将其放在PATH中。

你得到这一切的原因是Nokogiri不像真正的用户那样,它只是擦除和解析可能包含一堆嵌入式HTML的HTML文档等等。

答案 1 :(得分:1)

实际上真的很容易。

使用Capybara(在我的情况下使用PhantomJS,虽然我认为不重要)

    @session.visit url
    # Grab the text from the page
    @session.text
    # Grab the page title
    @session.title

完美的工作......

答案 2 :(得分:0)

我使用Sanitize效果很好。

Sanitize为您提供clean方法,可让您指定configuration

您可以选择最适合您的配置。

您可以查看democomparison