如何从Fotocasa网页特定位置抓取目标房源详情链接?
解决Fotocasa马德里租房页面房源链接抓取问题
Hey there! Let's work through how to grab those property detail links you need from Fotocasa's Madrid rental page. Here's what was tripping you up, plus a solid fix:
为什么你的初始尝试没拿到目标链接?
- 错误的节点定位:你用的XPath指向的是
span元素(就是显示"Leer más"的文本标签),而房源详情链接其实存在于这个span的父级a标签的href属性里。所以你只能拿到那个span文本,自然取不到链接。 - 泛抓取无效:直接抓取所有
<a>标签的href会得到大量无关链接(比如导航、广告链接),而且Fotocasa的页面结构里,房源链接有特定的标识,泛抓根本筛不出你要的内容。
正确的抓取方案
我们需要精准定位到房源卡片对应的<a>标签,提取它的href属性,再拼接成完整可访问的URL。
步骤1:定位正确的节点
通过浏览器开发者工具可以看到,Fotocasa的每个房源卡片里,详情链接的<a>标签都带有re-Card-link类名。用这个类名定位比硬编码的绝对XPath靠谱得多——绝对XPath很容易因为页面布局微调失效。
步骤2:调整后的R代码
library(httr) library(rvest) # 目标页面URL url <- "https://www.fotocasa.es/es/alquiler/viviendas/madrid-capital/todas-las-zonas/l/181" # 模拟浏览器UA池(你原来的逻辑保留,这里补充了几个示例UA) desktop_agents <- c( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0" ) # 发送请求 x <- GET(url, add_headers('user-agent' = desktop_agents[sample(1:length(desktop_agents), 1)])) # 解析页面并提取链接 property_links <- x %>% read_html() %>% html_nodes("a.re-Card-link") %>% # 精准定位房源链接的a标签 html_attr("href") # 提取href属性值 # 拼接完整URL(页面返回的是相对路径) full_property_links <- paste0("https://www.fotocasa.es", property_links) # 查看前几个结果 head(full_property_links)
代码说明
html_nodes("a.re-Card-link"):只筛选带有re-Card-link类的<a>标签,这些就是对应房源详情页的链接容器。html_attr("href"):提取<a>标签里的链接路径。- 拼接域名是因为页面返回的
href是相对路径(比如/es/alquiler/vivienda/...),加上域名才能得到可以直接访问的完整链接。
额外小贴士
- 避免绝对XPath:像你之前用的那种长串绝对XPath,只要网站调整页面结构(比如新增一个导航栏、调整卡片布局)就会失效,用类名或相对XPath(比如
//article[contains(@class, 're-Card')]/div/a)会更稳定。 - 反爬注意事项:如果要批量抓取多页内容,记得添加请求延迟(比如
Sys.sleep(2)),不要短时间内发送大量请求,避免被网站封禁IP。
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

