我想从以下网站抓取所有排名:
我尝试使用CSS选择器,该选择器告诉我使用“ .ratingNum”,但是它留下空白数据。我也尝试过使用GET函数,这会导致类似的问题。
# Attempt 1
url <- 'https://www.glassdoor.com/ratingsDetails/full.htm?employerId=432&employerName=McDonalds#trends-overallRating'
webpage <- read_html(url)
rank_data_html <- html_nodes(webpage,'.rankingNum')
rank_data <- html_table(rank_data_html)
head(rank_data)
# Attempt 2
res <- GET("https://www.glassdoor.com/ratingsDetails/full.htm",
query=list(employerId="432",
employerName="McDonalds"))
doc <- read_html(content(res, as="text"))
html_nodes(doc, ".ratingNum")
rank_data <- html_table(rank_data_html)
head(rank_data)
我希望结果能给我所有排名的列表,但是却给了我一个空列表,或者一个不包含排名的列表。
答案 0 :(得分:1)
您的列表为空,因为您GET
正在填充未填充的HTML文档。通常,发生这种情况时,您必须求助于RSelenium和co。,但是Glassdoor的面向公众的API实际上具有所需的一切-如果您知道在哪里看。
(注意:我不确定这是否正式属于Glassdoor的公共API,但我认为如果他们不加掩饰,那就是公平的游戏。我尝试查找一些信息,但他们的文档却很少。通常,如果您只是做一些小规模的分析,而不是猛烈抨击服务器或试图从数据中获利,公司通常会选择另一种方式,但是留意他们的服务条款仍然是一个好主意。想要向他们发送一封描述您正在做的事情的电子邮件,甚至询问是否成为API合作伙伴。请确保您遵守他们的attribution rules。继续后果自负。)
在浏览器的开发人员工具中查看“网络分析”标签。您将看到一些GET
请求返回JSON,其中一个具有您所需的地址。发送GET
并解析JSON:
library(httr)
library(purrr)
library(dplyr)
ratings <- paste0("https://www.glassdoor.com/api/employer/432-rating.htm?",
"locationStr=&jobTitleStr=&filterCurrentEmployee=false")
req_obj <- GET(ratings)
cont <- content(req_obj)
ratings_df <- map(cont$ratings, bind_cols) %>% bind_rows()
ratings_df
您应该最终得到一个包含评分数据的数据框。只是不要忘记,“ ceoRating”,“ bizOutlook”和“ recommend”是0-1的比例(如果是* 100,则是百分比),其余部分则以5分制反映平均用户评分:>
# A tibble: 9 x 3
hasRating type value
<lgl> <chr> <dbl>
1 TRUE overallRating 3.3
2 TRUE ceoRating 0.72
3 TRUE bizOutlook 0.42
4 TRUE recommend 0.570
5 TRUE compAndBenefits 2.8
6 TRUE cultureAndValues 3.1
7 TRUE careerOpportunities 3.2
8 TRUE workLife 3.1
9 TRUE seniorManagement 2.9