ruby – 如何使用Nokogiri从HTML中提取链接和链接文本
我喜欢Nokogiri – 它是从
XML和HTML文档中提取元素的绝佳工具.尽管在线示例很好,但它们主要展示了如何操作XML文档.
如何使用Nokogiri从HTML中提取提取链接和链接文本? 解决方法
这是一个最初为响应
Getting attribute’s value in Nokogiri to extract link URLs编写的迷你示例,在社区Wiki样式中提取以供参考.
以下是在解析HTTP中的链接时可能会执行的一些常见操作,以css和xpath语法显示. 从这个片段开始: require 'rubygems' require 'nokogiri' html = <<HTML <div id="block1"> <a href="http://google.com">link1</a> </div> <div id="block2"> <a href="https://stackoverflow.com">link2</a> <a id="tips">just a bookmark</a> </div> HTML doc = Nokogiri::HTML(html) 提取所有链接 我们可以使用xpath或css来查找所有< a>元素然后只保留具有href属性的元素: nodeset = doc.xpath('//a') # Get all anchors via xpath nodeset.map {|element| element["href"]}.compact # => ["http://google.com","https://stackoverflow.com"] nodeset = doc.css('a') # Get all anchors via css nodeset.map {|element| element["href"]}.compact # => ["http://google.com","https://stackoverflow.com"] 在上述情况下,.compact是必要的,因为搜索< a>. element除了其他元素外,还返回“just a bookmark”元素. 但我们可以使用更精确的搜索来查找包含href属性的元素: attrs = doc.xpath('//a/@href') # Get anchors w href attribute via xpath attrs.map {|attr| attr.value} # => ["http://google.com","https://stackoverflow.com"] nodeset = doc.css('a[href]') # Get anchors w href attribute via css nodeset.map {|element| element["href"]} # => ["http://google.com","https://stackoverflow.com"] 找到一个特定的链接 要查找< div id =“block2”>中的链接 nodeset = doc.xpath('//div[@id="block2"]/a/@href') nodeset.first.value # => "https://stackoverflow.com" nodeset = doc.css('div#block2 a[href]') nodeset.first['href'] # => "https://stackoverflow.com" 如果您知道自己只搜索一个链接,则可以使用at_xpath或at_css代替: attr = doc.at_xpath('//div[@id="block2"]/a/@href') attr.value # => "https://stackoverflow.com" element = doc.at_css('div#block2 a[href]') element['href'] # => "https://stackoverflow.com" 从相关文本中查找链接 如果您知道与链接相关联的文本并想要查找其网址,该怎么办?一个小的xpath-fu(或css-fu)派上用场: element = doc.at_xpath('//a[text()="link2"]') element["href"] # => "https://stackoverflow.com" element = doc.at_css('a:contains("link2")') element["href"] # => "https://stackoverflow.com" 从链接中查找文本 为了完整起见,您可以通过以下方式获取与特定链接相关联的文本: element = doc.at_xpath('//a[@href="https://stackoverflow.com"]') element.text # => "link2" element = doc.at_css('a[href="https://stackoverflow.com"]') element.text # => "link2" 有用的参考 除了广泛的Nokorigi documentation之外,我在写这篇文章时遇到了一些有用的链接: > a handy Nokogiri cheat sheet (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |