我要教你如何钓鱼。与试图找到我想要的相比,有时找到我不想要的并将其删除要容易得多。
从这段代码开始:
require 'nokogiri'
require 'open-uri'
URL = 'http://www.eximsystems.com/LaVerdad/Antiguo/Gn/Genesis.htm'
FOOTNOTE_ACCESSORS = [
'span[style*="font-size: 8.0pt"]',
'span[style*="font-size:8.0pt"]',
'span[style*="font-size: 7.5pt"]',
'span[style*="font-size:7.5pt"]',
'font[size="1"]'
].join(',')
doc = Nokogiri.HTML(open(URL))
doc.search(FOOTNOTE_ACCESSORS).each do |footnote|
footnote.remove
end
File.write(File.basename(URI.parse(URL).path), doc.to_html)
运行它,然后在浏览器中打开生成的 HTML 文件。滚动文件以查找要删除的脚注。选择部分文本,然后使用“检查元素”或任何您拥有的工具,可以在页面源中找到所选文本。在该文本中找到一些独特的东西,以便将其与您要保留的文本隔离开来。例如,我使用<span> 和<font> 标签中的字体大小来定位脚注。
继续向FOOTNOTE_ACCESSORS 数组添加访问器,直到删除所有不需要的元素。
这段代码并不完整,也没有像我通常为这类任务编写的那样紧凑,但它会让您了解如何完成这项特定任务。
这是一个更灵活的版本:
require 'nokogiri'
require 'open-uri'
URL = 'http://www.eximsystems.com/LaVerdad/Antiguo/Gn/Genesis.htm'
FOOTNOTE_ACCESSORS = [
'span[style*="font-size: 8.0pt"]',
'span[style*="font-size:8.0pt"]',
'span[style*="font-size: 7.5pt"]',
'span[style*="font-size:7.5pt"]',
'font[size="1"]',
]
doc = Nokogiri.HTML(open(URL))
FOOTNOTE_ACCESSORS.each do |accessor|
doc.search(accessor).each do |footnote|
footnote.remove
end
end
File.write(File.basename(URI.parse(URL).path), doc.to_html)
主要区别在于之前的版本假定FOOTNOTE_ACCESSORS 中的所有条目都是CSS。有了这个改变,也可以使用 XPath。随着条目的迭代,代码将需要更长的时间来运行,但是使用 XPath 进行挖掘的能力对您来说可能是值得的。