我从UCAS网站上收集了很多数据(使用mechanize gem),并且大部分数据都能正常工作,但当我试图从苏格兰提取入境要求时,我遇到了一些麻烦。以下是我用来查找和抓取进入要求的代码:
entry_link = course_details.search('ul.details_tabs a').first
if entry_link
# If there is a link to a qualification page for the course go to that
details_info[:entry] = process_entry(@mechanize.get(entry_link["href"]))
end
end
def process_entry(entry_req)
entry_array = []
entry_info = {}
# Sets all data in hash
@requirements = entry_req.search('li.qual-element.qual_range').text.strip
entry_info[:req] = @requirements
#Pushes to array, and prints
entry_array.push(entry_info)
print_entry_info(entry_info)
然而,这种回报并不是那么好。与其只返回苏格兰高音或高级高音的一个结果,不如同时提取这两个结果并输出:
BBB Typical offerAABB Typical offer
是否有任何一个区域,只拉BBB或AABB,或者使用gsub或其他东西将其剥离,只显示AABB或BBB?感谢您的帮助。
链接到将从中提取此类数据的示例页面:http://search.ucas.com/course/entryrequirements/448323/anthropology?Vac=2&AvailableIn=2016&IsFeatureProcessed=真&ret=提供者#coursedetailsmenu
问题是:
entry_req.search('li.qual-element.qual_range').text
不要将text
与NodeSet一起使用,这是search
返回的内容。请参阅NodeSet#text和Node#text的文档。
您需要对找到的节点进行迭代,并从每个节点中提取文本。通常,我们使用返回文本数组的search('some selector').map(&:text)
来执行此操作。