簡體   English   中英

Ruby從HTML提取鏈接

[英]Ruby extracting links from html

您好,這是我的腳本:

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' (我不推薦使用它,僅將其用於小型腳本)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM