【问题标题】:Web Scraping with Nokogiri::HTML and Ruby - Output to CSV issue使用 Nokogiri::HTML 和 Ruby 进行 Web 抓取 - 输出到 CSV 问题
【发布时间】:2013-03-28 19:50:19
【问题描述】:

我有一个脚本可以抓取网上商店的 HTML 文章页面。我正在使用一组 22 页进行测试,其中 5 个文章页面有产品描述,而其他页面没有。

此代码将正确的信息显示在屏幕上:

if doc.at_css('.product_description')
  doc.css('div > .product_description > p').each do |description|
    puts description
  end
  else
    puts "no description"
end

但现在我被困在如何正确地将找到的产品描述输出到我将它们写入 CSV 文件的数组中。

尝试了几个选项,但到目前为止都没有。 如果我将puts description 替换为@description << description.content,那么尽管它们不属于该行中的文章,但文章的所有描述最终都会出现在CSV 的最上面一行。

当我还替换 @description = "no description" 的“无描述”时,我的 CSV 中的前 14 行每行收到 1 个“无描述”字母。看起来很有趣,但这并不是我所需要的。

如果需要更多代码,请大声疾呼!

这是我在脚本中使用的 CSV 代码:

    CSV.open("artinfo.csv", "wb") do |row|
    row << ["category", "sub-category", "sub-sub-category", "price", "serial number",  "title", "description"]
    (0..@prices.length - 1).each do |index|
    row << [
            @categories[index], 
            @subcategories[index], 
            @subsubcategories[index], 
            @prices[index],
            @serial_numbers[index], 
            @title[index],
            @description[index]]
     end 
    end  

【问题讨论】:

  • 能否也向我们展示您的 CSV 代码?
  • 部分困惑是调用您的 CSV 对象row
  • 不明白,csv文件中其他数据显示正确...只是描述行为怪异

标签: html ruby web-scraping nokogiri scrape


【解决方案1】:

听起来您的数据排列不正确。如果是你应该能够做到:

CSV.open("artinfo.csv", "w") do |csv|
  csv << ["category", "sub-category", "sub-sub-category", "price", "serial number",  "title", "description"]
  [@categories, @subcategories, @subsubcategories, @prices, @serial_numbers, @title, @description].transpose.each do |row|
    csv << row
  end 
end

【讨论】:

  • 这给了我一个无法将字符串转换为 csv 上的数组
  • 如果我是你,我会找到更好的迭代方式。将所有价格放在一个数组中,将所有标题放在另一个数组中等是没有意义的。
  • 通过最后的提示和仔细查看我设法解决问题的代码,谢谢!
猜你喜欢
  • 2019-05-22
  • 2016-07-03
  • 2013-03-21
  • 2018-01-04
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多