选择的变化,我刮这两个网站:在引入nokogiri
- https://www.library.uq.edu.au/uqlsm/availablepcsembed.php?branch=Law
- https://www.library.uq.edu.au/uqlsm/availablepcsembed.php?branch=BSL。
不幸的是,它们有变化。其中一个在href
标记内具有级别名称(例如级别2),而另一个只是纯文本。我如何选择一个或另一个取决于哪一个?
我想这无济于事:
level.css(/"a[href]"|".left"/).text
这里被缩短2 HTML部分的版本:
<table class="chart">
<tr valign="middle">
<td class="left">Level 2</td> <!-- the problem -->
<td class="middle"><div style="width:86%;"><strong>86%</strong></div></td>
</tr>
</table>
<table class="chart">
<tr valign="middle">
<td class="left"><a href="availablepcsembed.php?branch=BSL&room=Lvl1">Level 1</a></td>
<td class="middle"><div style="width:32%;"><strong>32%</strong></div></td>
</tr>
</table>
我的代码(来自于整个方法的代码部分编辑)
def self.scrape_details_page(library_url)
details_page = Nokogiri::HTML(open(library_url))
details_page.css("table.chart tr").collect do |level|
right = level.css(".right").text.split
{level: level.css("a[href]").text, available: right[0], out_of_available: right[3]}
end
end
我修复了我的原始帖子以反映完整的方法,因此更易于理解。 ''\ r \ n“+”Level 1 \ r \ n“+”42%\ r \ n“+”13使用'.text'可以正常工作,但是很难在看到它时返回: 31个电脑的\ r \ n“+”“'。我的答案在下面使用'.css(“。left”).text',并且似乎正好选择了我需要的东西。谢谢。 –