Ruby 使用Nokogiri从交替行收集数据
我有这个样本表数据Ruby 使用Nokogiri从交替行收集数据,ruby,nokogiri,mechanize,Ruby,Nokogiri,Mechanize,我有这个样本表数据 <table class="main"> <tr class="main"> <td align="left">3/4/05</td> <td>123-334</td> <td></td> <td></td> <td></td> <td align="right">$2.
<table class="main">
<tr class="main">
<td align="left">3/4/05</td>
<td>123-334</td>
<td></td>
<td></td>
<td></td>
<td align="right">$2.00</td>
</tr>
<tr style="background-color:#FFFFD7">
<td colspan="2">Company Name</td>
<td colspan="4">Owner Name</td>
</tr>
.....
This goes on like this with every other <tr> holding
information that I need together.
......
</table>
3/4/05
123-334
$2.00
公司名称
所有者名称
.....
每次都是这样
我需要的信息。
......
我已经写了这段代码,但它只是抓住了第一个,并不是所有的
data_table = Nokogiri::HTML(page_body, 'UTF-8')
FasterCSV.open('data.csv', 'a') do |csv|
table = data_table.xpath('//table[@class="main"]')
rows = table.xpath('tr')
rows.collect do |row|
date = row.at_xpath('tr[@class="main"]/td[1]/text()')
id = row.at_xpath('tr[@class="main"]/td[2]/text()')
amount = row.at_xpath('tr[@class="main"]/td[3]/text()')
company = row.at_xpath('tr[@style="background-color:#FFFFD7"]/td[1]/text()')
name = row.at_xpath('tr[@style="background-color:#FFFFD7"]/td[2]/text()')
csv << [date, id, amount, company, name]
end
end
data\u table=Nokogiri::HTML(页面正文“UTF-8”)
FasterCSV.open('data.csv','a')do | csv|
table=data_table.xpath('//table[@class=“main”]”)
rows=table.xpath('tr')
rows.collect do | row|
date=row.at_xpath('tr[@class=“main”]/td[1]/text()
id=row.at_xpath('tr[@class=“main”]/td[2]/text())
amount=row.at_xpath('tr[@class=“main”]/td[3]/text()
company=row.at_xpath('tr[@style=“background color:#FFFFD7”]/td[1]/text()'))
name=row.at_xpath('tr[@style=“background color:#FFFFD7”]/td[2]/text()'))
csv您可以获取表的所有“tr”,然后使用每个切片(2)
获取相关行对
html = %q{
<table class="main">
<tr class="main">
<td align="left">3/4/05</td>
<td>123-334</td>
<td></td>
<td></td>
<td></td>
<td align="right">$2.00</td>
</tr>
<tr style="background-color:#FFFFD7">
<td colspan="2">Company Name</td>
<td colspan="4">Owner Name</td>
</tr>
<tr class="main">
<td align="left">2/4/05</td>
<td>223-334</td>
<td></td>
<td></td>
<td></td>
<td align="right">$4.00</td>
</tr>
<tr style="background-color:#FFFFD7">
<td colspan="2">Company Name2</td>
<td colspan="4">Owner Name2</td>
</tr>
</table>}
data_table = Nokogiri::HTML(html)
table = data_table.xpath('//table[@class="main"]')
rows = table.xpath('tr')
rows.each_slice(2) do |row_pair|
date = row_pair[0].at_xpath('./td[1]').text
id = row_pair[0].at_xpath('./td[2]').text
amount = row_pair[0].at_xpath('./td[6]').text
company = row_pair[1].at_xpath('./td[1]').text
name = row_pair[1].at_xpath('./td[2]').text
p [date, id, amount, company, name]
end
这是工作,但我忘了补充,我有一个我认为是混乱的数据头的第一行。。。我如何跳过第一步?您可以使用rows
变量上的drop(1)
删除第一行。因此,将行。每个片段(2)
更改为行。删除(1)。每个片段(2)
。
["3/4/05", "123-334", "$2.00", "Company Name", "Owner Name"]
["2/4/05", "223-334", "$4.00", "Company Name2", "Owner Name2"]