将HTML格式化为CSV



我正在用Ruby和Nokogiri抓取一个网站。

此脚本创建一个本地文本文件,打开一个URL,并在满足表达式tr td时写入该文件。它运行良好。

require 'rubygems'
require 'nokogiri'
require 'open-uri'
DOC_URL_FILE = "doc.csv" 
url = "http://www.SuperSecretWebSite.com"
data = Nokogiri::HTML(open(url))

all_data = data.xpath('//tr/td').text
File.open(DOC_URL_FILE, 'w'){|file| file.write all_data} 

每行有五个字段,我想水平运行,然后在填充五个单元格后转到下一行。这些数据都在那里,但不可用。

我希望从一个知道如何创建CSV格式代码的人那里学习或获得代码:

  1. 当脚本读取代码时,将每个新的td/td x5水平转储到自己的单元格中
  2. 转到下一行等

HTML的布局是:

<tr>
    <td>John Smith</td>
    <td>I live here 123</td>
    <td>phone ###</td>
    <td>Birthday</td>
    <td>Other Data</td>
</tr>

最终产品应该是什么样子。

http://picpaste.com/pics/Screenshot-KRnqRGrP.1361813552.png

电流输出

    john Smith      I live here 123  phone ### Birthday Other Data,

这是遍历表并将其单元格提取到数组中的非常标准的代码。在这一点上,如何处理数据取决于您,但将其传递给CSV非常容易。

require 'nokogiri'
require 'pp'
doc = Nokogiri::HTML(<<EOT)
<table>
  <tr>
    <td>John Smith</td>
    <td>I live here 123</td>
    <td>phone ###</td>
    <td>Birthday</td>
    <td>Other Data</td>
  </tr>
  <tr>
    <td>John Smyth</td>
    <td>I live here 456</td>
    <td>phone ###</td>
    <td>Birthday</td>
    <td>Other Data</td>
  </tr>
</table>
EOT
data = []
doc.at('table').search('tr').each do |tr|
  data << tr.search('td').map(&:text)
end
pp data

哪个输出:

[["John Smith", "I live here 123", "phone ###", "Birthday", "Other Data"],
["John Smyth", "I live here 456", "phone ###", "Birthday", "Other Data"]]

该代码使用at来定位第一个<table>,然后使用search在每个<tr>上迭代。对于每一行,它遍历单元格并提取它们的文本。

Nokogiri的at查找某个事物的第一个出现,并返回一个Node。search查找所有出现的节点并返回一个NodeSet,它的作用就像一个数组。为了简单起见,我使用了CSS访问器,而不是XPath。


仅供参考:

File.open(DOC_URL_FILE, 'w'){|file| file.write all_data} 

可以更简洁地写为:

File.write(DOC_URL_FILE, all_data)

我已经研究这个问题一段时间了。你能再帮我吗?

叹气

你读过CSV文件,尤其是例子吗?如果不是定义data = [],而是将其替换为:,会发生什么

CSV.open("path/to/file.csv", "wb") do |data|

并用CSV块包裹循环,如:

CSV.open("path/to/file.csv", "wb") do |data|
  doc.at('table').search('tr').each do |tr|
    data << tr.search('td').map(&:text)
  end
end

这还没有经过测试,但它真的很简单。去摆弄一下。

相关内容

  • 没有找到相关文章

最新更新