R语言——数据爬取:有效率的爬取网页数据

 

使用R语言  数据包“rvest” 去爬取世界2011至2021年间的世界100强企业。

指定网站:(https://brandirectory.com/rankings/global/table).

这里爬出来的是2021年的世界500强, 请问要怎么改才能提取到前100强以及有没有更加有效率的方法爬取2011-2021年的十年间的方法呢? 还是就只能一年一年的爬取了。 

 

url <-'https://brandirectory.com/rankings/global/2021/table'
webpage <- read_html(url)
xdata <- webpage %>% html_nodes("tbody tr")
DataX = NULL
for (i in 1:length(xdata)){
  tmp <- xdata[i] %>% html_nodes("td")
  rank21 <- tmp[1] %>% html_text()  %>% as.numeric()
  rank20 <- tmp[2] %>% html_text()  %>% as.numeric()
  company = trimws(gsub("\n", "", tmp[3] %>% html_text()))
  country = trimws(gsub("\n", "", tmp[4] %>% html_text()))
  flag <- tmp[5] %>% html_nodes("img") %>% xml_attr("src")
  value21 <- tmp[5] %>% html_nodes("span") %>% html_text()
  value20 <- tmp[6] %>% html_nodes("span") %>% html_text()
  rate21 = trimws(gsub("\n", "", tmp[7] %>% html_text()))
  rate20 = trimws(gsub("\n", "", tmp[8] %>% html_text()))
  DataX = rbind(DataX, c(rank21, rank20,company, country,
                         value21, value20, rate21, rate20))
  }

先分析一下要爬页面的数据,根据情况改进代码。

爬出来的是2021年的世界500强,循环的次数等于length(xdata),也就是说length(xdata)等于500,如果要提取到前100强,只需要循环100次就行了。

爬取2011-2021年的十年间的方法,可以采用循环的方式爬取多页数据。

这里爬取的连接是url <-'https://brandirectory.com/rankings/global/2021/table',链接中的2021表示2021年,如果要提取其他年份,只需要把这里的数字换成变量,把链接拼接一下,例如

url <-paste("https://brandirectory.com/rankings/global/",as.character(2021),"/table",sep='')

然后循环,从2011-2021,即可爬取到2011-2021年的十年间的数据。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y