如何爬取需登录的动态tipti页面中AKI超市的商品信息?
解决tipti网站AKI超市商品信息提取问题
你的问题根源在于未处理登录流程且未等待动态页面加载完成就直接尝试提取元素,导致返回空结果。以下是完整的解决方案:
核心问题分析
- 直接访问商品页面会被重定向到登录页,未登录状态下无法获取商品数据
- 动态页面的元素需要等待前端渲染完成才能被抓取,缺少等待逻辑会导致选择器匹配不到元素
完整实现步骤
1. 处理登录流程
先导航到登录页,输入账号密码并完成登录操作
2. 选择AKI超市
登录成功后,找到AKI超市的入口元素并点击
3. 等待商品元素加载
使用wait_for_selector等待商品列表元素渲染完成,再进行数据提取
示例代码
library(rvest) library(hayalbaz) # 初始化puppet实例 puppet <- puppet$new() # 1. 导航到登录页 puppet$goto("https://www.tipti.market/") # 等待登录输入框加载,需自行验证页面元素选择器 puppet$wait_for_selector("input[type='email']") puppet$wait_for_selector("input[type='password']") # 输入账号密码(替换为你的实际账号密码) puppet$set_value("input[type='email']", "你的邮箱") puppet$set_value("input[type='password']", "你的密码") # 点击登录按钮(替换为实际的登录按钮选择器) puppet$click("button[type='submit']") # 等待登录跳转完成,通过目标元素判断 puppet$wait_for_selector(".store-selection-container") # 假设超市选择容器的选择器 # 2. 选择AKI超市(替换为AKI对应的元素选择器) puppet$click(".store-card[data-store='aki']") # 3. 等待商品列表加载完成 puppet$wait_for_selector(".card-product__name") # 等待商品名称元素出现 # 提取商品名称和价格 product_names <- puppet$get_elements(".card-product__name") |> html_text(trim = TRUE) product_prices <- puppet$get_elements(".card-product__price") |> html_text(trim = TRUE) # 输出结果 cat("商品名称:\n") print(product_names) cat("\n商品价格:\n") print(product_prices) # 关闭会话 puppet$close()
关键注意事项
- 选择器验证:需手动在浏览器开发者工具中确认登录输入框、登录按钮、AKI超市入口、商品名称/价格的准确CSS选择器(页面可能更新,选择器会变化)
- 等待逻辑:所有交互前都要使用
wait_for_selector确保元素已加载,避免因页面渲染延迟导致操作失败 - 账号安全:不要在公开代码中硬编码账号密码,建议使用环境变量或配置文件读取
- Cookie复用:如果需要多次爬取,可使用
get_cookies保存登录状态,下次初始化时通过set_cookies传入,避免重复登录
内容的提问来源于stack exchange,提问作者Rafael Díaz
相关产品推荐
相关产品推荐

