read_html()从我的输入读取不同的URL

read_html()从我的输入读取不同的URL,r,url,rvest,R,Url,Rvest,我正在R中使用rvest包。read\u html()函数有时会从输入URL读取不同的URL。当输入URL不存在时会发生这种情况,因此它会自动重定向到类似的URL。有没有办法读取并停止此自动重定向 web似乎应该有办法避免重定向,并用httr检查状态代码是200还是3xx,但我不确定它是什么。无论如何,您可以检查URL是否匹配它应该匹配的内容: get_html{xml_document} #> #>[1]\nAg-Name的意思是什么,Ag是什么意思?\n[2]\r\n似乎应该有一种方法来避

我正在R中使用rvest包。
read\u html()
函数有时会从输入URL读取不同的URL。当输入URL不存在时会发生这种情况,因此它会自动重定向到类似的URL。有没有办法读取并停止此自动重定向


web似乎应该有办法避免重定向,并用httr检查状态代码是200还是3xx,但我不确定它是什么。无论如何,您可以检查URL是否匹配它应该匹配的内容:

get_html{xml_document}
#> 

#>[1]\nAg-Name的意思是什么,Ag是什么意思?\n[2]\r\n似乎应该有一种方法来避免重定向,并使用httr检查状态代码是200还是3xx,但我不确定它是什么。无论如何,您可以检查URL是否匹配它应该匹配的内容:

get_html{xml_document}
#> 

#>[1]\nAg-Name的意思,Ag是什么意思?\n[2]\r\n您可能会考虑是否不同,并执行搜索给定名称的POST请求。然后使用css属性=值选择器从返回内容中过滤出结果的含义。然后测试筛选结果的长度,如果>0,则生成最终url。那么就没有再直接的了。即使你不想要有意义的url,它也会有效地做同样的事情。未找到时长度为零,而找到时长度大于0

require(httr)
require(magrittr)
require(rvest)

name = 'Jemima'
base = 'http://www.thinkbabynames.com'
headers = c('User-Agent' = 'Mozilla/5.0')
body  <- list('s' = name,'g' = '1' ,'q' = '0')
res <- httr::POST(url = 'http://www.thinkbabynames.com/query.php', httr::add_headers(.headers=headers), body = body)

results <- content(res) %>% html_nodes(paste('[href$="' , name,  '"]','[href*=meaning]',sep='')) %>% html_attr(., "href")

if(length(results)>0){
  results <- paste0(base, results)
}
print(results)
require(httr)
需要(magrittr)
要求(rvest)
名称='Jemima'
基地组织http://www.thinkbabynames.com'
headers=c('User-Agent'='Mozilla/5.0')
正文(0){

结果您可能会考虑是否不同,并执行搜索给定名称的POST请求。然后使用css属性=值选择器从返回内容中筛选出结果的含义。然后测试筛选结果的长度,如果>0,则生成最终url。这样就不会重新定向。即使您不希望使用url时,它有效地执行相同的操作。未找到url时,长度将为零,而找到url时,长度将大于0

require(httr)
require(magrittr)
require(rvest)

name = 'Jemima'
base = 'http://www.thinkbabynames.com'
headers = c('User-Agent' = 'Mozilla/5.0')
body  <- list('s' = name,'g' = '1' ,'q' = '0')
res <- httr::POST(url = 'http://www.thinkbabynames.com/query.php', httr::add_headers(.headers=headers), body = body)

results <- content(res) %>% html_nodes(paste('[href$="' , name,  '"]','[href*=meaning]',sep='')) %>% html_attr(., "href")

if(length(results)>0){
  results <- paste0(base, results)
}
print(results)
require(httr)
需要(magrittr)
要求(rvest)
名称='Jemima'
基地组织http://www.thinkbabynames.com'
headers=c('User-Agent'='Mozilla/5.0')
正文(0){

结果Rvest可以作为会话对象查询页面,其中包括完整的服务器响应,包括状态代码

使用html会话(跳转或导航到后续页面),而不是阅读html

您可以查看会话的状态代码,如果会话成功(即未重定向),则可以使用read_html从会话对象获取内容

x <- html_session("http://www.thinkbabynames.com/meaning/0/Ag")

  statusCode <- x$response$status_code
  
  if(statusCode == 200){
    # do this if response is successful
    web <- read_html(x)
  }
  if(statusCode %in% 300:308){
    # do this if response is a redirect
  }

xRvest可以将页面作为会话对象进行查询,其中包含完整的服务器响应,包括状态代码

使用html会话(跳转或导航到后续页面),而不是阅读html

您可以查看会话的状态代码,如果会话成功(即未重定向),则可以使用read_html从会话对象获取内容

x <- html_session("http://www.thinkbabynames.com/meaning/0/Ag")

  statusCode <- x$response$status_code
  
  if(statusCode == 200){
    # do this if response is successful
    web <- read_html(x)
  }
  if(statusCode %in% 300:308){
    # do this if response is a redirect
  }

x好的,你可以用
r把它搞错。好的,你可以用
r把它搞错。你只对意义结果感兴趣吗?我正在尝试获取一个名称的所有变体。我有一个名称数据集,我需要浏览,如果数据集中的任何名称没有包含在网站中,那么我想转到下一个。有时
 read_html()
返回一个错误,因为页面不存在,有时它会重新指向一个类似的名称。您是否只对结果的含义感兴趣?我正在尝试获取名称的所有变体。我有一个名称数据集,需要查看,如果数据集中的任何名称未包含在网站中,则我希望移动到下一个。有时
 read_html()
返回一个错误,因为页面不存在,有时它会重新指向一个类似的名称。