gpt4 book ai didi

ruby - 使用 Ruby 获取页面标题

转载 作者:数据小太阳 更新时间:2023-10-29 08:18:19 24 4
gpt4 key购买 nike

我正在尝试获取 title 标签中的内容,但我做不到。我正在关注一些关于 stackoverflow 的答案,这些答案应该有效,但对我来说却没有。

这就是我正在做的:

require "open-uri"
require "uri"

def browse startpage, depth, block
if depth > 0
begin
open(startpage){ |f|
block.call startpage, f
}
rescue
return
end
end
end

browse("https://www.ruby-lang.org/es/", 2, lambda { |page_name, web|
puts "Header information:"
puts "Title: #{web.to_s.scan(/<title>(.*?)<\/title>/)}"
puts "Base URI: #{web.base_uri}"
puts "Content Type: #{web.content_type}"
puts "Charset: #{web.charset}"
puts "-----------------------------"
})

标题输出只是[],为什么?

最佳答案

open 返回 File对象或将其传递给 block (实际上是 Tempfile 但这并不重要)。打电话to_s只返回一个包含对象类及其 id 的字符串:

open('https://www.ruby-lang.org/es/') do |f|
f.to_s
end
#=> "#<File:0x007ff8e23bfb68>"

扫描标题的字符串显然是无用的:

"#<File:0x007ff8e23bfb68>".scan(/<title>(.*?)<\/title>/)

相反,您必须 read 文件内容:

open('https://www.ruby-lang.org/es/') do |f|
f.read
end
#=> "<!DOCTYPE html>\n<html>\n...</html>\n"

您现在可以扫描 <title> 的内容标签:

open('https://www.ruby-lang.org/es/') do |f|
str = f.read
str.scan(/<title>(.*?)<\/title>/)
end
#=> [["Lenguaje de Programaci\xC3\xB3n Ruby"]]

或者,使用 Nokogiri : (因为 You can't parse [X]HTML with regex )

open('https://www.ruby-lang.org/es/') do |f|
doc = Nokogiri::HTML(f)
doc.at_css('title').text
end
#=> "Lenguaje de Programación Ruby"

关于ruby - 使用 Ruby 获取页面标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26778911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com