首页
学习
活动
专区
工具
TVP
发布

R爬虫从0开始-世界濒危遗产地数据爬取案例

本次采用《基于R语言的自动收集》这本书进行参考作为案例,从第一章开始与大家进行分享,书中些许变动在文中会以注释形式说明。

本次涉及的知识点:

XML+RCurl包 抓取网页中表格形式的数据

stringr包 处理脏乱的数据以及

正则表达式 对文字的处理

maps包 标记世界地图上某一处经纬度

# 首先采用install.packages('XML')安装包,并使用library(''XML")调用所需要的包,本次将会运用到的是

library('XML')

library('stringr')

library('RCurl')

library('dplyr')

library('stringr')

library('maps')

一、XML包网络抓取的运用:

# 世界濒危遗产地址已更改与书中案例地址不同

url

#getURL函数运用解析,从中可以获取table格式的信息

web

# readHTMLTable可以获取网页含有table格式信息

tables

danger

如果是360的对网页所需部分进行右击审查元素,别的浏览器也可以通过F12进行搜索,从下图中可以看到网页中 有 table class,我们所需的table在第二个

二、stringr包数据处理的运用

接下来会涉及到数据清理,并且选择一些我们所需要的数据

# 通过view函数可以观测tables实际结构

str(danger)

# 观测有哪些名称

names(danger)

# 选取1,3,4,5,6,7列数据

danger_table

# 重新赋值变量名,建议不要赋值成中文吧

names(danger_table)

# 将年份设置为数值型数据值

danger_table$year

三、stringr包+正则表达式的运用

以下是正则表达式知识点的图表,详细将在后面章节说明

# 对地址的经纬度数据的观测

danger_table$local

# 数据处理str_extract_all函数属于匹配功能 相当于excel中的查找

y_coord

说明:[ -]*相当于匹配任意个空格和-

[0-9]*相当于匹配任意个数字,比如:123456,1324

[0-9]*[.]*[0-9]* 相当于匹配任意个数字加上.加上任意数字 123456.12

# str_sub函数 截取字符串 从第三个到最后第二个

y_coords

# %>%是一个传递函数 能把参数传递给下一个函数这样看起来比较清楚,熟悉的小伙伴可以使用下面函数得到经纬度

y_coords % str_sub(3,-2) %>% as.numeric()

# 传递给原来的参数danger_table

danger_table$y_coords

x_coord

x_coords % str_sub(3,-1) %>% as.numeric()

danger_table$x_coords

# dim()函数返回行列数据(书中遗物仅44个 现抓取有52个)

dim(danger_table)

# 观测前几行数据

head(danger_table)

四、map包的使用

# 对文物赋值不同符号

# 对不同文物进行不同符号的赋值

pch

# 画出地图

map("world", col = "darkgrey", lwd = 0.5, mar = c(0.1, 0.1, 0.1, 0.1))

# 设置点

points(danger_table$x_coords, danger_table$y_coords, pch = pch,col=pch,

main='世界濒危遗产分布图')

# 设置标签lengend

legend( -180,20,c("文化遗产", "自然遗产"), col = c( 2, 19),

text.col = "blue", lty = c( -2, 2), pch = c(2, 19),

box.col='white' )

box()

# 可以看出,很多濒危地区位于非洲,中东,和西南亚,濒危文化遗产比自然遗产更多

# 直方图观测

hist(

danger_table$year,

freq = TRUE,

ylab = "频数",

xlab = "列入濒危名单年份",

main = "世界濒危文化直方图",

col = "BLUE"

)

# 直方图中比作者收录的时候多了2015年以后的数量,由此可见维基百科还是在不断更新的.

参考文献:

《基于R语言的自动数据收集》

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180329G1LNUR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券