当我尝试通过终端运行时,我可以解析/显示数据但是当我输入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)
答案 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 }