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

使用rvest抓取意大利房产网页数据失败,请求排查代码问题

问题分析与解决方案

1. 核心问题

你的代码存在两个关键问题:

  • 使用html_element()(单元素提取方法)而非html_elements()(多元素提取),无法获取页面上所有房源的价格;
  • 目标网站有基础反爬机制,裸请求会返回空内容或无效页面,同时Selector Gadget抓取的class选择器可能已失效。

2. 修正后的代码

library(rvest)
library(dplyr)
library(httr)
library(purrr)

# 模拟浏览器请求头,避免被反爬拦截
headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
)

url <- "https://www.immobiliare.it/search-list/?idContratto=1&idCategoria=1&idTipologia%5B0%5D=7&idTipologia%5B1%5D=12&idTipologia%5B2%5D=13&idTipologia%5B3%5D=11&criterio=rilevanza&__lang=it&fkRegione=ven&idProvincia=VE&idNazione=IT&pag=1&dtCookie=v_4_srv_3_sn_9E341BF8AC6892004B9D2502432FB6E5_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_0"

# 带请求头发起请求
page <- GET(url, headers)
content <- content(page, as = "text")
parsed_html <- read_html(content)

# 先定位所有房源的卡片容器
property_cards <- parsed_html %>% html_elements("div.in-listingCard")

# 从每个卡片中提取目标信息
property_data <- property_cards %>%
  map_dfr(function(card) {
    tibble(
      # 提取挂牌价格(当前页面有效class为in-listingCard__price)
      price = card %>% html_element("span.in-listingCard__price") %>% html_text2(),
      # 提取地址/位置
      address = card %>% html_element("div.in-listingCard__address") %>% html_text2(),
      # 提取所有特征并合并为字符串
      features = card %>% html_elements("li.in-listingCard__feature") %>% html_text2() %>% paste(collapse = "; ")
    )
  })

print(property_data)

3. 关键说明

  • 反爬处理:添加User-Agent请求头模拟浏览器访问,绕过网站基础反爬拦截;
  • 元素定位逻辑:先抓取所有房源卡片容器,再从容器内提取子元素,比全局直接抓取更稳定,避免无关元素干扰;
  • 选择器验证:如果后续class再次失效,可手动打开页面按F12检查元素,确认最新的class名称;
  • 多页遍历:后续只需修改URL中的pag=1参数为循环变量(如pag=i),重复上述抓取逻辑即可实现多页数据获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:14:59