我希望从一个构造不良的源站点编写内容到csv行。我的csv行很简单:
COMPANY_NAME,WEBSITE,EMAIL,TEL1,TEL2,FAX,STREET,CITY,STATE,ZIP,COUNTRY
不幸的是,源代码没有干净的ID和类来搜索。在一堆"对我没用"的元素之间,我需要的一切都被捆绑在一个单一的<p>
元素中,就像这样:
<h2 class="lead">Contact Details</h2>
<br>
<p><!--what I want is in here -->
<strong>COMPANY_NAME/strong> <br>
STREET<br>
CITY, STATE ZIP<br>
COUNTRY<br>
Tel: +1 555 555 5555<br>
Tel: +1 555 555 5555<br>
Fax: +1 555 555 5555<br>
Email: <a href="mailto:EMAIL_ADDRESS</a><br>
URL: <a target="_blank" rel="nofollow" href="http://www.COMPANY_WEB_ADDRESS.com">
www.COMPANY_WEB_ADDRESS.com</a><br>
</p>
所以,我当前的代码(我相信你会笑得很开心)是这样的:
page = Nokogiri::HTML(open('http://www.SOURCE/'))
page.css('h2.lead')[0].next_element.next_element
这行丑陋的代码找到了第一次出现的带有class lead的页面h2元素。我必须显式地使用[0]来应用方法?我是否捕获了错误的元素?然后我使用两个"next_element"调用在我的选择之后抓取<p>
元素两个元素。我很讨厌写这篇文章,但在我选择之后,我似乎无法穿越第n个关卡!最后,<p>
元素和所有我想要的内容被捕获!迷你胜利!
输出非常难看(更不用说我的一行代码非常难看),我不确定将<p>
内容"分解"成可以输出到csv的数组的最佳方法。
我很想把它写进一个文件,然后用linux终端来清理它…那将是欺骗和退出!
请指教。
您可以使用:
p = page.at('h2.lead + br + p')
为了将内容分开,可以这样做:
p.children.map &:text