【发布时间】: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