你好,这是我的脚本:
ARGV.each do |input_filename|
doc = Nokogiri::HTML(File.read(input_filename))
title, body = doc.title.gsub("/s+/"," ").downcase.strip, doc.xpath('//body').inner_text.tr('"', '').gsub("n", '').downcase.strip
link = doc.search("a[@href]") //Adding this part generates errors
filename = File.basename(input_filename, ".*")
puts %Q("#{title}", "#{body}", "#{filename}", "#{link}").downcase
end
我在从html文件列表中提取链接时遇到问题。我认为这个问题是由于一些html文件中的非常规编码造成的。这是我得到的错误。
extractor.rb:9:in `block in <main>': incompatible character encodings: UTF-8 and CP850 (Encoding::CompatibilityError)
from extractor.rb:4:in `each'
from extractor.rb:4:in `<main>'
您可以使用CSS选择器以不同的方式进行操作:
doc.css('a').map { |link| link['href'] }
这将在文档中搜索所有锚点,并在数组中返回它们的href文本。
Nokogiri在内部始终以UTF-8存储字符串。返回文本值的方法将始终返回UTF-8编码的字符串。
UTF-8和cp850有冲突(您使用的是windows?)。您可以调整File.read(input_filename)
尝试
File.read(input_filename, :encoding => 'cp850:utf-8')
如果你的html文件是windows文件。
如果你的html文件已经是utf-8,尝试:
File.read(input_filename, :encoding => 'utf-8')
另一种解决方案可能是在代码开头使用Encoding.default_external = 'utf-8'
。(我不推荐它,只用于小脚本)。