read_html 用于向量元素和字符

read_html for vector element and for character

我有 URL 向量,我需要从中获取一些文本。

我使用 rvest 和这个代码:

r <- getURL(queries[2])

pages_data <- read_html(r) %>% 
  html_nodes(".bloko-button.HH-Pager-Control") %>%
  html_text()

在这种情况下,我得到:

character(0)

但是如果我将字符串而不是矢量元素放在一起,它就会起作用。

url <- "https://kazan.hh.ru/search/vacancy?L_is_autosearch=false&area=2&clusters=true&enable_snippets=true&no_magic=true&only_with_salary=true&search_field=name&text=продавец-консультант"
r <- getURL(url)

pages_data <- read_html(r) %>% 
  html_nodes(".bloko-button.HH-Pager-Control") %>%
  html_text()
[1] "2"      "3"      "4"      "5"      "74"     "дальше"

但是 queries[2] == urlTRUE。有什么问题吗?

获取queries的函数:

start_url <- "https://kazan.hh.ru/search/vacancy?L_is_autosearch=false&area=2&clusters=true&enable_snippets=true&no_magic=true&only_with_salary=true&search_field=name"
professions <- c("frontend", "продавец-консультант", "менеджер+по+персоналу", "слесарь")

queries <- str_c(start_url, "&text=", professions)

您需要使用 URLencode() 来包装查询。更多关于 URLencode here.

library(RCurl)
r <- getURL(URLencode(queries[2]))

pages_data <- read_html(r) %>% 
  html_nodes(".bloko-button.HH-Pager-Control") %>%
  html_text()

pages_data

顺便说一下,第一个查询成功而第二个查询失败的原因是第一个不包含任何西里尔字符。在所有 URL 上使用 URLencode() 是一个很好的安全做法。