1、R中的错误识别
2、R中的循环控制
3、xpath及爬虫总结
参考链接:
try的使用:https://blog.csdn.net/YJJ18636810884/article/details/83176190
tryCatch的使用1:https://blog.csdn.net/weixin_41929524/article/details/84667843
tryCatch的使用2:https://www.jianshu.com/p/99e21e018ae3
一、R中的错误识别
背景:
在进行循环计算时,有可能输入存在异常或公式存在bug,导致部分输入值报错,从而终止循环,而这种现象的逐一排查是困难且耗时的,因此我们需要能够识别循环过程中的error,并完成:1、对错误进行合适的判断及后续处理,2、保证错误的出现不影响后续的循环的继续进行。R中有两个函数可以做到如此功能
try():在可能存在错误的代码中使用fit=try(代码),如果多行代码就使用fit=try({代码}),该函数会返回一个‘try-error'类的对象,因此可以通过if('try-error'%in%class(fit)){next(或者break)}来决定循环的进行或终止
tryCatch():有时我们需要对不同的报告类型(error,warning)做出不同处理时,可以使用tryCatch(需要捕捉的表达式, error = 错误时触发的函数式, finally = 不管error/正常运行/warning最终一定要运行的函数式)
对于tryCatch的举例:
divide <- function(x, y) {
result <- tryCatch({
x / y
}, warning = function(war) {
cat("warning!", war, "\n")
}, error = function(err) {
cat("error!", err, "\n")
}, finally = {
print("executing finally clause")
})
return(result)
}
二、R语言中的循环控制
1、两类循环语句,for和while
for:循环执行语句,直到某个变量不在指定范围为止(有限或确定范围内的循环)
for (i in 1:10) print("Hello")
while:循环执行语句,直到条件不为真为止(可以是无限范围,更像是条件控制下的循环),需要在循环体中重赋值变量!
i <- 10
while (i > 0) {print("Hello"); i <- i - 1}
2、两个循环控制语句,next和break
参考链接:
https://baijiahao.baidu.com/s?id=1610772171650448266&wfr=spider&for=pc
next:结束本次循环中next后的语句,继续进行下一次循环
图中所示的在循环体中,next前和后都有语句,当执行遇到next时,循环体中next后面的语句不会被执行到,而是跳转到循环体中的第一个语句执行,或者判断循环体的条件是否满足以进行下一次循环
break:结束全部循环,直接跳出!
由图可以看出,在循环体中如果遇到了break,则执行会从循环体中跳出,执行循环体后面的语句(不会再进入循环体中)。这个用法在repeat语句中是非常有用的,否则repeat会陷入死循环。
三、Xpath及爬虫总结
Xpath学习:https://www.w3school.com.cn/xpath/xpath_axes.asp
https://www.cnblogs.com/jingdenghuakai/p/11078780.html
xpath中的轴的使用、节点条件选择和部分函数的使用总结
1、轴
ancestor: 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self: 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute: 选取当前节点的所有属性。
child:选取当前节点的所有子元素。
descendant: 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self: 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following: 选取文档中当前节点的结束标签之后的所有节点。
namespace: 选取当前节点的所有命名空间节点。
parent: 选取当前节点的父节点。
preceding: 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling: 选取当前节点之前的所有同级节点。
self: 选取当前节点。
常用节点表示
//div/parent::a 寻找div节点的父节点,父节点的名称是a
//div/child::a 寻找div节点的子节点,子节点的名称是a
//div/following-sibling::a 寻找div节点的同级节点,该同级节点在div节点之后,该同级节点的名称是a
//div/preceding-sibling::a 寻找div节点的同级节点,该同级节点在div节点之前,该同级节点的名称是a
2、节点的条件选择
根据节点的不同的属性值来从同名节点中挑选需要的节点,一般使用[]进行条件选取
常用的条件选择
//div[@class="xxx"] 选择class属性为xxx的名为div的节点
//div[text()="xxx"] 选择text属性为xxx的名为div的节点
3、部分函数的总结
最常用的是contains和属性连用来选择包含某些信息的节点
常用的方式
//div[contains(@id,"w")] 选取id属性中包含w的名为div的节点
//div[contains(text(),"w")] 选取text属性中包含w的名为div的节点
4、使用rvest的爬虫总结
html_session(url)%>%read_html()%>%html_nodes(xpath=xpath)%>%html_attr(name=name)|%>%html_text()