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

使用Ruby Mechanize爬取Shopee商品链接失败求助

问题排查与解决方案

核心问题分析

  1. CSS选择器语法错误
    原代码中的CSS选择器col-xs-2-4 shopee-search-item-result__item不符合语法规范:类选择器需要以.开头,多个类名之间用.连接(表示同时匹配多个类),正确写法应为.col-xs-2-4.shopee-search-item-result__item。

  2. 页面动态渲染限制
    Shopee的商品列表是通过JavaScript动态加载的,Mechanize作为纯HTTP请求工具,只能获取页面的初始静态HTML,无法执行JavaScript,因此静态页面中并不包含你要抓取的商品元素,这是无输出的主要原因。

解决方案

方案1:改用支持JS渲染的工具

使用Capybara配合Selenium来抓取动态渲染的页面,示例代码如下:

require 'capybara/dsl'
require 'selenium-webdriver'

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

session = Capybara::Session.new(:selenium_chrome)
session.visit('https://shopee.com.br/Casa-e-Decora%C3%A7%C3%A3o-cat.11059983/')

# 等待商品列表加载完成
session.find('.col-xs-2-4.shopee-search-item-result__item')

session.all('.col-xs-2-4.shopee-search-item-result__item').each do |product|
  link = product.find('a')
  puts link.text
  puts link[:href]
end

方案2:修复选择器(仅语法参考)

如果后续遇到静态渲染的页面场景,可先修正CSS选择器,但此方法无法解决Shopee的动态加载问题,仅作语法示例:

require 'mechanize'

agent = Mechanize.new
page = agent.get('https://shopee.com.br/Casa-e-Decora%C3%A7%C3%A3o-cat.11059983/')

# 修正后的选择器
page.css('.col-xs-2-4.shopee-search-item-result__item').each do |product|
  link = product.at('a')
  puts link&.text # 使用&.避免nil报错
end

额外提示

  • Shopee存在反爬机制,频繁请求可能会被封禁IP,建议添加请求间隔、使用代理,并遵守网站robots.txt规则。
  • 优先考虑使用Shopee官方开放的API获取数据,这是更稳定合规的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:10:23