You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails中使用Nokogiri爬取href指向页面的内容?

嘿,我来帮你搞定这个问题!其实爬取跳转页面的数据核心就是先抓主页面的链接,再逐个请求子页面解析内容,用Nokogiri完全可以做到,我给你拆解成具体步骤和代码示例:

步骤1:确保安装了Nokogiri

如果还没装这个gem,先在终端运行:

gem install nokogiri
步骤2:完整代码示例

下面是针对你给出的HTML结构写的可运行代码,你只需要替换主页面的URL就行:

require 'nokogiri'
require 'open-uri'

# 替换成你实际要爬的主页面地址
main_page_url = "http://your-main-page-url-here.com"

begin
  # 第一步:解析主页面,提取所有地点链接
  main_page_doc = Nokogiri::HTML(URI.open(main_page_url))
  # 用CSS选择器定位到你要的a标签,提取所有href属性,去重避免重复链接
  place_links = main_page_doc.css('div ul li a').map { |a_tag| a_tag['href'] }.uniq

  # 第二步:逐个访问子页面,提取数据
  place_links.each do |sub_page_link|
    begin
      # 请求子页面并解析
      sub_page_doc = Nokogiri::HTML(URI.open(sub_page_link))
      
      # 提取子页面里的地点名称(div下的p标签文本)
      place_name = sub_page_doc.css('div p').text.strip
      # 提取图片链接(div下的img标签的src属性),加rescue防止页面没img时报错
      image_src = sub_page_doc.css('div img')[0]['src'] rescue nil

      # 这里可以把数据存到数组、文件或者数据库,先简单输出看看结果
      puts "地点名称: #{place_name}"
      puts "图片链接: #{image_src}"
      puts "-------------------------"
    rescue => e
      # 单个链接请求失败时不中断整个脚本,打印错误信息就行
      puts "访问链接 #{sub_page_link} 失败: #{e.message}"
    end
  end
rescue => e
  # 主页面请求失败的处理
  puts "访问主页面失败: #{e.message}"
end
关键部分解释
  • 主页面解析:用css('div ul li a')精准定位到你给出的HTML结构里的a标签,map把每个a标签的href属性提取出来,uniq去掉可能重复的链接。
  • 子页面处理:遍历每个链接时,重新请求页面并解析,用同样的CSS选择器定位到子页面的p和img标签,提取需要的内容。
  • 异常处理:两层begin...rescue分别处理主页面和单个子页面的请求失败,避免一个小错误导致整个脚本崩溃。
额外提醒
  • 如果遇到相对链接(比如href是/place1而不是完整URL),记得用URI.join(main_page_url, sub_page_link).to_s把主域名和相对链接拼接成完整URL。
  • 频繁爬取容易被网站封禁IP,建议在每个子页面请求后加个间隔,比如sleep 1(暂停1秒)。
  • 一定要遵守目标网站的使用规则,别搞恶意爬取哦!

内容的提问来源于stack exchange,提问作者Corey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:10:29