r - Rvest 'if (is_http) { 中的错误:参数的长度为零' 对于特定网站 - 为什么?
问题描述
library(rvest)
url = 'vzbvastgoed.nl'
html_nodes(html_session(url), 'body')
这是我的代码。对于不同的网站,它可以工作,但会引发错误:
if (is_http) { 中的错误:参数长度为零
request_perform(req, hu$handle$handle)
httr::GET(url, x$config, ..., handle = x$handle)
request_GET(session, url)
html_session(url) html_nodes(html_session(url), "body")
在线搜索和在 stackoverflow 上搜索并没有真正帮助:( 似乎是一个相当罕见的情况或未知。
解决方案
我可以复制这个问题:
library(rvest)
url = 'vzbvastgoed.nl'
session <- html_session(url)
#> Error in if (is_http) {: Argument hat Länge 0
html_nodes(session, 'body')
#> Error in html_nodes(session, "body"): Objekt 'session' nicht gefunden
似乎它没有正确解析 url,所以让我们尝试一下:
url = 'https://vzbvastgoed.nl'
session <- html_session(url)
#> Warning in request_GET(session, url): Forbidden (HTTP 403).
html_nodes(session, 'body')
#> Error in read_xml.response(x$response, ..., as_html = as_html): Forbidden (HTTP 403).
至少我们现在有一个重大错误(HTTP 403)。我的猜测是这个网站想要阻止自己收集和阻止不是来自浏览器的请求,因为这对我有用:
library(httr)
url = 'https://vzbvastgoed.nl'
session <- html_session(url, add_headers(`User-agent` = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1"))
html_nodes(session, 'body')
#> {xml_nodeset (1)}
#> [1] <body>\r\n<div id="maindiv">\r\n\t<div id="kop">\r\n\t\t <div id="zoekfor ...
当然,您必须问自己是否要像这样规避网站所有者的规定。但是,从技术上讲,它是有效的。
由reprex 包(v0.3.0)于 2020-06-30 创建
推荐阅读
- tfs - Team Foundation 中的更改父级已禁用
- excel - 我想将具有名称的特定列从多个 excel 文件合并到一张表
- flutter - Flutter 获取当前时区/代号始终为 en_US
- java - 具有 RetryTemplate 最佳实践或建议的千分尺
- microsoft-graph-api - 如何在 MS graph API 中发送带有图像和录制音频附件的电子邮件?
- python - Django 后保存功能无法在配置文件模型中保存角色 ID
- vue.js - 如何使用 SSR 获取 Quasar 应用程序上下文?
- shiro - Apache Shiro 中的 API 密钥实现
- arrays - 使用 javascript / node 对相互依赖的对象(内联过程)进行排序
- android - Android - 如何设置所有孩子的位置取决于布局大小