【问题标题】:How can I count the amount of outbound links a page has?如何计算一个页面的出站链接数量?
【发布时间】:2023-03-22 04:06:01
【问题描述】:

使用 Ruby 学习抓取。我正在尝试计算给定页面的出站链接数量,但我不确定如何告诉 Ruby 我只想计算出站链接。

我当前的代码:

require "open-uri"

# Collect info
puts "What is your URL?"
url = gets.chomp
puts "Your URL is #{url}"
puts "Loading..."

# Check keyword count
page = open(url).read
link_total = page.scan("</a>")
# obl_count = ???
link_count = link_total.count
puts "Your site has a total of #{link_count} links."

我怎样才能完成这个?

【问题讨论】:

    标签: ruby scraper open-uri


    【解决方案1】:

    就像you should never parse HTML with regular expressions 一样,您可能应该使用nokogiri 为您做脏活。

    简单来说,您可以使用 CSS 选择器来查找标签。从那里很容易计算:

    Nokogiri::HTML(page).css('a').length
    

    【讨论】:

    • 谢谢,我不知道这个规则。您知道我将如何分离内部链接和出站链接吗?即计算特定维基页面上的链接总数,然后减去页面上链接到其他维基百科页面的链接?
    • 1.在某些(罕见的)情况下,&lt;a&gt; 标签用于链接以外的目的,因此除此之外您还需要检测href。 2.您还需要这样做以过滤掉站点内链接。 3. 通常,一个页面有多个链接。你需要uniq相关数组。
    • 您可以根据需要检查每个链接的内容。 Nokogiri 返回可用于访问href 属性的特殊对象数组:Nokogiri::HTML(page).css('a').collect { |a| a.attr('href') } 一个简单的测试是查看链接的第一个字符是否为/,在这种情况下它是本地链接。更强大的测试将使用 URI 解析模块和 URI.join 来确定它是否是链接到的众多 Wikipedia 站点之一。
    【解决方案2】:

    你可以使用:

    http://anemone.rubyforge.org/

    Anemone 是一个 Ruby 库,可让您快速轻松地编写爬取网站的程序。它提供了一个简单的 DSL,用于在站点的每个页面上执行操作、跳过某些 URL 并计算到站点上给定页面的最短路径。

    多线程设计使 Anemone 速度更快。 API 使它变得简单。 Ruby 的表现力使其功能强大。

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      相关资源
      最近更新 更多