【问题标题】:How to write method to csv not just string? Ruby csv gem如何将方法写入 csv 而不仅仅是字符串?红宝石 csv 宝石
【发布时间】:2018-09-11 16:24:58
【问题描述】:

我需要将文本内容从 html 元素放入 csv 文件。使用 ruby​​ csv gem,包装字符串和 IO 的主要写入方法似乎只转换字符串,即使指定了对象。

例如:

 Searchresults = puts browser.divs(class: 'results_row').map(&:text)
 csv << %w(Searchresults)

仅返回 csv 文件中的“搜索结果”。

似乎应该有一种方法可以指定要放置的 div 元素中的文本,而不仅仅是文字字符串。

编辑:

好吧,arieljuod 和 spickermann 是对的。现在我从 div 元素输出到 csv 获取文本内容,但不是像我输出到控制台时一样。 div 元素“results_row”有两个带有文本内容的 a 元素。它还有一个子 div“results_subrow”,其中包含一段未写入 csv 的文本内容。 HTML:

<div class="bodytag" style="padding-bottom:30px; overflow:visible"> 
<h2>Search Results for "serialnum3"</h2>
<div id="results_banner">
    Products
    <span>Showing 1 to 2 of 2 results</span>
</div>
<div class="pg_dir"></div>
<div class="results_row">
    <a href="/products/fuji/" title="Fuji, Inc.">FUJI</a>
    <a href="/products/fuji/50mm lens/" title="Fuji, Inc.">50mm lens</a>
    <div class="results_subrow">
        <p>more product info</p>
    </div>
</div>
<div class="results_row">
    <a href="/products/fuji/" title="Fuji, Inc. 2">FUJI</a>
    <a href="/products/fuji/50mm lens/" title="Fuji, Inc.">50mm lens</a>
    <div class="results_subrow">
        <p>more product info 2</p>  
    </div>
</div>
<div class="pg_dir"></div>  

我的代码:

 search_results = browser.divs(class: 'results_row').map(&:text)
 csv << search_results

我认为在定位器中包含子 div“results_subrow”会找到我所缺少的。喜欢:

search_results = browser.divs(class: 'results_row', 'results_subrow').map(&:text)
 csv << search_results

【问题讨论】:

  • 不要在变量上使用大写S,并删除%w(..)puts,你在那里混合了很多东西
  • 好的,是的,我不是故意要包括 put,谢谢
  • 好的,现在它已成功写入 csv。但是输出到控制台会得到 div 元素中的所有文本内容,而写入 csv 只会得到第一个标题。有没有办法解决这个问题?

标签: ruby-on-rails ruby csv parsing methods


【解决方案1】:

%w[Searchresults] 创建一个包含单词Searchresults 的数组。你可能想要这样的东西:

# assign the array returned from `map` to the `search_results` variable
search_results = browser.divs(class: 'results_row').map(&:text)

# output the `search_results`. Note that the return value of `puts` is `nil`
# therefore something like `Searchresults = puts browser...` doesn't work
puts search_results

# append `search_results` to your csv 
csv << search_results

【讨论】:

  • 这可行,但来自 div 元素的文本包含逗号,并且来自 div 中不同子元素的文本未附加到 csv。
  • 放到控制台获取所有文本内容。写入 csv 只会获得第一个标题。数组格式在文本内容中必须用逗号打断
  • 您可能想要添加 browser.divs(class: 'results_row').map(&amp;:text) 返回的示例以及您想要添加到 CSV 中的示例,而不是添加到您的问题中。
猜你喜欢
  • 2014-02-22
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多