Nokogiri示例未显示数组(Ruby)

时间:2017-11-16 22:33:36

标签: ruby nokogiri

当我尝试通过终端运行时,我可以解析/显示数据但是当我输入pets_array = []

我没有看到任何东西

我的代码如下:

require 'HTTParty'
require 'Nokogiri'
require 'JSON'
require 'Pry'
require 'csv'

page = HTTParty.get('https://newyork.craigslist.org/search/pet?s=0')

parse_page = Nokogiri::HTML(page)

pets_array = []

parse_page.css('.content').css('.row').css('.result-title hdrlnk').map do |a|
  post_name = a.text
  pets_array.push(post_name)
end

CSV.open('pets.csv', 'w') do |csv|
  csv << pets_array
end

Pry.start(binding)

1 个答案:

答案 0 :(得分:1)

也许准确地说,您可以使用.result-title.hdrlnk.result-info.result-row.rows内的.content类访问每个锚标记:

page = HTTParty.get 'https://newyork.craigslist.org/search/pet?s=0'
parse_page = Nokogiri::HTML page
pets_array = parse_page.css('.content .rows .result-row .result-info .result-title.hdrlnk').map &:text
p pets_array
# ["Mini pig", "Black Russian Terrier", "2 foster or forever homes needed Asap!", ...]

当您使用map时,可以使用pets_array变量在每个迭代元素上存储文本,无需推送。

如果你想编写存储在数组中的数据,那么你可以直接推送,不需要重新定义为空数组(原因是因为你得到一个空白的csv文件):

require 'httparty'
require 'nokogiri'
require 'csv'

page = HTTParty.get 'https://newyork.craigslist.org/search/pet?s=0'
parse_page = Nokogiri::HTML page
pets_array = parse_page.css('.content .rows .result-row .result-info .result-title.hdrlnk').map &:text
CSV.open('pets.csv', 'w') { |csv| csv << pets_array }