打开多个html文件&;使用Nokogiri输出到.txt

打开多个html文件&;使用Nokogiri输出到.txt,html,ruby,parsing,xpath,nokogiri,Html,Ruby,Parsing,Xpath,Nokogiri,只是想知道这两个函数是使用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

只是想知道这两个函数是使用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有点陌生

谢谢。

我有一个类似的代码。
请参阅:

模块MyParser
HTML_FILE_DIR=`您的HTML文件目录`
def self.run(选项={})
file_list=Dir.entries(HTML_file_Dir).拒绝{f | f=~/^\./}
结果=文件_list.map do |文件|
html=File.read(“#{html_File_DIR}/#{File}”)
doc=Nokogiri::HTML(HTML)
解析\u到\u散列(doc)
结束
写入csv(结果)
结束
定义self.parse_to_散列(doc)
数组=[]

数组您可以这样输出到文件:

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 }
authors=doc.xpath(“//meta[@name='author'或@name='author']/@content”)
keywrds=doc.xpath(//meta[@name='keywords'或@name='keywords']/@content)
results=authors.map{x}“Author:{x}”join(“\n”)+
关键字:{x}}}.join(“\n”)

open('results.txt','w'){| f | f我相信这里有两个完全不同的问题:“如何从HTML中提取数据?”和“如何编写文本文件?”-我建议您将其分解为单独的部分。事实上-问题太广泛了。好吧,提取部分没问题,它更多的是访问多个文件,然后将输出写入文本文件。在正文中标记这两个问题以进行澄清,希望这会有所帮助。谢谢。谢谢。尝试一下,我的代码到底做了什么是。请将
doc.css(“…”)
替换为
doc.xpath(“…”)
。CSV类是必需的CSV gem,它包含在标准库中。在代码的第一行添加
require'CSV'
。感谢第二部分。我最初做的是第一部分,但随后通过如下方式追加每个结果:'open('a1.txt','a'){f | f.puts'\nKeywords:{metakey}虽然我认为分析整个目录+输出到纯文本文件(而不是csv或其他文件)的组合可能有问题。可能必须做出一些让步。@tsukugiri使用第一个选项,您可以在块内运行整个程序。没有理由继续打开和关闭文件。