如何使用Nokogiri和Ruby从嵌套表中删除HTML中的值?

如何使用Nokogiri和Ruby从嵌套表中删除HTML中的值?,第1张

概述我试图从我正在使用Nokogiri解析的页面中提取姓名,ID,电话,电子邮件,性别,种族,DOB,班级,专业,学校和GPA. 我尝试了一些不同的xpath,但我尝试抓取的东西比我想要的要多得多: <span class="subTitle"><b>Recruit Profile</b></span><br><table border="0" width="100%"><tr><td> 我试图从我正在使用Nokogiri解析的页面中提取姓名,ID,电话,电子邮件,性别,种族,dob,班级,专业,学校和GPA.

我尝试了一些不同的xpath,但我尝试抓取的东西比我想要的要多得多:

<span ><b>Recruit Profile</b></span><br><table border="0" wIDth="100%"><tr><td>      <table bgcolor="#afafaf" border="0" cellpadding="0" wIDth="100%"><tr><td>      <table bgcolor="#cccccc" border="0" cellpadding="2" cellspacing="2" wIDth="100%"><tr><td bgcolor="#dddddd"><b>name</b></td>          <td bgcolor="#dddddd">Some Person</td>        </tr><tr><td bgcolor="#dddddd"><b>EDU ID</b></td>          <td bgcolor="#dddddd">A12345678</td>        </tr><tr><td bgcolor="#dddddd"><b>Phone</b></td>          <td bgcolor="#dddddd">123-456-7890</td>        </tr><tr><td bgcolor="#dddddd"><b>Address</b></td>          <td bgcolor="#dddddd">1234 Somewhere Dr.<br>City ST,12345</td>        </tr><tr><td bgcolor="#dddddd"><b>Email</b></td>          <td bgcolor="#dddddd">[email protected]</td>        </tr><tr><td bgcolor="#dddddd"><b>Gender</b></td>          <td bgcolor="#dddddd">Female</td>        </tr><tr><td bgcolor="#dddddd"><b>Ethnicity</b></td>          <td bgcolor="#dddddd">UnkNown</td>        </tr><tr><td bgcolor="#dddddd"><b>Date of Birth</b></td>          <td bgcolor="#dddddd">Jan 1st,1901</td>        </tr><tr><td bgcolor="#dddddd"><b>Class</b></td>          <td bgcolor="#dddddd">Sophomore</td>        </tr><tr><td bgcolor="#dddddd"><b>Major</b></td>          <td bgcolor="#dddddd">Biology</td>        </tr><tr><td bgcolor="#dddddd"><b>School</b></td>          <td bgcolor="#dddddd">University of Somewhere</td>        </tr><tr><td bgcolor="#dddddd"><b>GPA</b></td>          <td bgcolor="#dddddd">0.00</td>        </tr><tr><td bgcolor="#dddddd" valign="top"><b>Availability</b></td>          <td bgcolor="#dddddd">      <table border="0" cellspacing="0" cellpadding="0"><tr>
解决方法 我假设会有很多“Recruit Profile”跨度,后面跟着包含所有细节的表格.以下方法将获取整个HTML页面,只查找这些跨页,并为每个页面找到下表,然后在该表下方的任何位置找到所需的字段:

require 'nokogiri'# Pass in or set the array of labels you want to use# Returns an array of hashes mapPing these labels to the valuesdef recruits_details(HTML,fIElds=%W[name #{"EDU ID"} Phone Email Gender])  doc = Nokogiri::HTML(HTML)  recruit_labels = doc.xpath('//span[b[text()="Recruit Profile"]]')  recruit_labels.map do |recruit_label|    recruit_table = recruit_label.at_xpath('following-sibling::table')    Hash[ fIElds.map do |fIEld_label|      label_td = recruit_table.at_xpath(".//td[b[text()='#{fIEld_label}']]")      [fIEld_label,label_td.at_xpath('following-sibling::td/text()').text ]    end ]  endendrequire 'pp'pp recruits_details(HTML_string)#=> [{"name"=>"Some Person",#=>   "EDU ID"=>"A12345678",#=>   "Phone"=>"123-456-7890",#=>   "Email"=>"[email protected]",#=>   "Gender"=>"Female"}]

像.//foo [bar [text()=\”jim“]]这样的XPath表达式意味着:

>在当前节点下的任何位置找到’foo’元素
> …但仅当它有一个’bar’元素作为孩子
> …但仅当’bar’元素具有文本“jim”作为其内容时

一个XPath表达式,如follow-sibling :: …表示查找当前节点之后与表达式匹配的兄弟元素…

XPath表达式… / text()选择Text node; text方法用于提取该文本节点的值(实际字符串).

Nokogiri的xpath方法返回与表达式匹配的所有元素的数组,而at_xpath方法返回与表达式匹配的第一个元素.

总结

以上是内存溢出为你收集整理的如何使用Nokogiri和Ruby从嵌套表中删除HTML中的值?全部内容,希望文章能够帮你解决如何使用Nokogiri和Ruby从嵌套表中删除HTML中的值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存