有没有什么可以将html转换为纯文本(也许是nokogiri脚本)?可以保持换行的东西,但就是这样。
如果我在googledocs上写一些东西,比如this,并运行该命令,它会输出(删除css和javascript),这个:
\n\n\n\n\nh1. Test h2. HELLO THEREI am some teexton the next line!!!OKAY!#*!)$!
所以格式化全部搞砸了。我相信有人已经在那里解决了这些细节。
答案 0 :(得分:55)
实际上,这更简单:
require 'rubygems'
require 'nokogiri'
puts Nokogiri::HTML(my_html).text
但是你仍然有换行问题,所以你必须弄清楚你想如何处理这些问题。
答案 1 :(得分:13)
你可以从这样的事情开始:
require 'open-uri'
require 'rubygems'
require 'nokogiri'
uri = 'http://stackoverflow.com/questions/2505104/html-to-plain-text-with-ruby'
doc = Nokogiri::HTML(open(uri))
doc.css('script, link').each { |node| node.remove }
puts doc.css('body').text.squeeze(" \n")
答案 2 :(得分:10)
只是剥离标签和多余的换行符可以接受吗?
html.gsub(/<\/?[^>]*>/, '').gsub(/\n\n+/, "\n").gsub(/^\n|\n$/, '')
第一个剥离标签,第二个将重复的断行减少到一个,第三个删除字符串开头和结尾的换行符。
答案 3 :(得分:4)
我正在使用sanitize
宝石。
(" " + Sanitize.clean(html).gsub("\n", "\n\n").strip).gsub(/^ /, "\t")
它确实会丢弃超链接,这可能是某些应用程序的问题。但是我正在进行NLP文本分析,所以这对我的需求来说是完美的。
答案 4 :(得分:4)
require 'open-uri'
require 'nokogiri'
url = 'http://en.wikipedia.org/wiki/Wolfram_language'
doc = Nokogiri::HTML(open(url))
text = ''
doc.css('p,h1').each do |e|
text << e.content
end
puts text
这样可以从网页中提取所需的文本(大部分时间)。例如,如果您还想包含链接,请将a
添加到块中的css类。
答案 5 :(得分:2)
答案 6 :(得分:1)
如果您使用rails,您可以:
html = '<div class="asd">hello world</div><p><span>Hola</span><br> que tal</p>'
puts ActionView::Base.full_sanitizer.sanitize(html)
答案 7 :(得分:0)
如果它在轨道中,你可以使用它:
html_escape_once(value).gsub("\n", "\r\n<br/>").html_safe
答案 8 :(得分:0)
稍微根据Matchu的回答,这适用于我(非常相似)的要求:
html.gsub(/<\/?[^>]*>/, ' ').gsub(/\n\n+/, '\n').gsub(/^\n|\n$/, ' ').squish
希望它让某人的生活更容易: - )