我有一个数据框urls
,它只是我要抓取的网址列表,以获取源代码中定义的变量pageName
。为此,我使用以下代码:
# Crawl Page Names
for(n in 1:length(urls$URL))
{
if (domain(urls$URL[n])=="www.domain.com") {
doc = readLines(con = file(as.character(urls$URL[n]), encoding = "UTF-8"))
close(con)
rowNumber = grep('s.pageName', doc)
datalines = grep(pageNamePattern,doc[rowNumber],value=TRUE)
gg = gregexpr(pageNamePattern,datalines)
matches = mapply(getexpr,datalines,gg)
matches = gsub(" ", "", matches[1], fixed = TRUE)
result = gsub(pageNamePattern,'\\1',matches)
names(result) = NULL
urls$pageName[n] = stri_unescape_unicode(result[1])
} else {
urls$pageName[n] <- NA
}
}
if (domain(urls$URL[n])=="www.domain.com")
使用urltools
包中包含的函数domain
,让我抓取那些我知道定义了pageName变量的URL,这些URL是特定域中的。 / p>
但是,如果解析后的页面的http状态响应返回4XX客户端错误或5XX服务器错误,我的代码就会中断。
仅当con
的http状态响应为200(OK)时,我想在代码中添加第二个if进行爬网。有人知道如何使用它或使用哪个包或功能吗?