特定网站的 Rvest 'Error in if (is_http) { : argument is of length zero' -- 为什么?
Rvest 'Error in if (is_http) { : argument is of length zero' for specific websites -- why?
library(rvest)
url = 'vzbvastgoed.nl'
html_nodes(html_session(url), 'body')
这是我的代码。对于不同的网站,它可以工作,但会引发错误:
Error in if (is_http) { : argument is of length zero
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")
在网上和 Whosebug 上搜索并没有真正帮助 :( 似乎是一个相当罕见的案例或未知。
我可以重现问题:
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 package (v0.3.0)
于 2020-06-30 创建
library(rvest)
url = 'vzbvastgoed.nl'
html_nodes(html_session(url), 'body')
这是我的代码。对于不同的网站,它可以工作,但会引发错误:
Error in if (is_http) { : argument is of length zero
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")
在网上和 Whosebug 上搜索并没有真正帮助 :( 似乎是一个相当罕见的案例或未知。
我可以重现问题:
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 package (v0.3.0)
于 2020-06-30 创建