使用Ruby将HTML转换为纯文本?

Lan*_*ard 22 ruby

有没有什么可以将HTML转换为纯文本(也许是nokogiri脚本)?可以保持线条断裂的东西,但就是这样.

如果我在googledocs上写一些东西,像这样,并运行该命令,它输出(删除css和javascript),这:

\n\n\n\n\nh1. Test h2. HELLO THEREI am some teexton the next line!!!OKAY!#*!)$!
Run Code Online (Sandbox Code Playgroud)

因此格式化全部搞砸了.我相信有人已经在某处解决了这些细节.

Mat*_*chu 56

实际上,这更简单:

require 'rubygems'
require 'nokogiri'

puts Nokogiri::HTML(my_html).text
Run Code Online (Sandbox Code Playgroud)

但是你仍然有换行问题,所以你必须弄清楚你想如何自己处理这些问题.

  • 是的,但是这样你就不会摆脱<script>节点,最终结果是在输出中获得了Javascript代码 (2认同)

Lev*_*evi 14

你可以从这样的事情开始:

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")
Run Code Online (Sandbox Code Playgroud)

  • 您还可以按如下方式获取所有脚本和链接节点:doc.css('script,link').each {| node | node.remove} (3认同)

Mat*_*chu 9

简单地剥离标签和多余的换行符可以接受吗?

html.gsub(/<\/?[^>]*>/, '').gsub(/\n\n+/, "\n").gsub(/^\n|\n$/, '')
Run Code Online (Sandbox Code Playgroud)

第一个剥离标签,第二个将重复的断行减少到一个,第三个删除字符串开头和结尾的换行符.