想知道这两个函数是使用Nokogiri还是通过更基本的Ruby命令完成的。
require 'open-uri'
require 'nokogiri'
require "net/http"
require "uri"
doc = Nokogiri.parse(open("example.html"))
doc.xpath("//meta[@name='author' or @name='Author']/@content").each do |metaauth|
puts "Author: #{metaauth}"
end
doc.xpath("//meta[@name='keywords' or @name='Keywords']/@content").each do |metakey|
puts "Keywords: #{metakey}"
end
etc...
问题1:我只是试图解析.html文档的目录,从meta html标记中获取信息,并在可能的情况下将结果输出到文本文件。我尝试了一个简单的* .html通配符替换,但这似乎不起作用(至少不与Nokogiri.parse(open())可能它适用于:: HTML或:: XML)
问题2:但更重要的是,是否可以将所有这些元内容输出输出到文本文件中以替换puts命令?
如果代码对于执行的简单任务过于复杂,也请原谅我,但我对Nokogiri / xpath / Ruby有点新鲜。
感谢。
答案 0 :(得分:0)
我有类似的代码 请参阅:
module MyParser
HTML_FILE_DIR = `your html file dir`
def self.run(options = {})
file_list = Dir.entries(HTML_FILE_DIR).reject { |f| f =~ /^\./ }
result = file_list.map do |file|
html = File.read("#{HTML_FILE_DIR}/#{file}")
doc = Nokogiri::HTML(html)
parse_to_hash(doc)
end
write_csv(result)
end
def self.parse_to_hash(doc)
array = []
array << doc.css(`your select conditons`).first.content
... #add your selector code css or xpath
array
end
def self.write_csv(result)
::CSV.open("`your out put file name`", 'w') do |csv|
result.each { |row| csv << row }
end
end
end
MyParser.run
答案 1 :(得分:0)
您可以输出到这样的文件:
File.open('results.txt','w') do |file|
file.puts "output" # See http://ruby-doc.org/core-2.1.2/IO.html#method-i-puts
end
或者,您可以执行以下操作:
authors = doc.xpath("//meta[@name='author' or @name='Author']/@content")
keywrds = doc.xpath("//meta[@name='keywords' or @name='Keywords']/@content")
results = authors.map{ |x| "Author: #{x}" }.join("\n") +
keywrds.map{ |x| "Keywords: #{x}" }.join("\n")
File.open('results.txt','w'){ |f| f << results }