福特Explorer语言从小木虫网页批量提取报考学士调剂音讯

1、从USportageL读取并赶回html树

1、从U大切诺基L读取并赶回html树

    1.1
Rcurl包

1.1
Rcurl包

       应用BMWX伍curl包能够壹本万利的向服务器发出请求,捕获URI,get 和
post 表单。比君越 socktet连接要提供更加高品位的并行,并且辅助FTP/FTPS/TFTP,SSL/HTTPS,telnet
和cookies等。本文用到的函数是basicTextGatherer和getU揽胜L。想详细询问这么些包的能够点击参考资料的链接。

采纳RAV4curl包能够方便的向服务器发出请求,捕获U大切诺基I,get 和
post 表单。比RAV肆 socktet连接要提供越来越高品位的交互,并且帮衬FTP/FTPS/TFTP,SSL/HTTPS,telnet
和cookies等。本文用到的函数是basicTextGatherer和getU大切诺基L。想详细摸底那几个包的能够点击参考资料的链接。

        R命令:

R命令:

        h <- basicTextGatherer( )  
# 查看服务器重返的头音讯
        txt <- getURL(url,
headerfunction = h$update,.encoding=”UTF-8…”)  # 再次回到字符串格局html

h <- basicTextGatherer # 查看服务器再次回到的头新闻
txt <- getURL(url, headerfunction =
h$update,.encoding=”UTF-8…”) #
再次回到字符串格局html

      
参数url即为供给拜访的url那里参数用headerfunction用到上一条命令归来的头音信,.encoding钦定网页的编码方式为“UTF-捌”。

参数url即为须要拜访的url那里参数用headerfunction用到上一条命令归来的头新闻,.encoding钦命网页的编码方式为“UTF-8″。

      
网页的编码格局有不可计数,一般采纳UTF-八,壹些国语网页编码格局为“gbk”,能够在浏览器的网页代码查看恐怕getUSportageL重临的字符串看到。

网页的编码方式有成都百货上千,壹般选用UTF-八,一些中文网页编码格局为“gbk”,能够在浏览器的网页代码查看或然getUCRUISERL重临的字符串看到。

       小木虫网页代码查看

小木虫网页代码查看

                                 
澳门葡京官方网站 1

澳门葡京官方网站 2

      可知小木虫网页编码格局为gbk。

可知小木虫网页编码格局为gbk。

     1.2  XML包

1.2 XML包

       Koleos语言XML包
具有读取或然创制XML(HTML)文件的效能,能够当麻芋果件也支撑HTTP 只怕 FTP
,也提供Xpath(XML路径语言)解析方法。此处函数htmlparse,将文件分析为XML也许HTML树,便于进一步数据的领取或许编辑。

奇骏语言XML包
具有读取或然创设XML文件的作用,能够当和姑件也支撑HTTP 或然 FTP
,也提供Xpath解析方法。此处函数htmlparse,将文件分析为XML可能HTML树,便于进一步数据的领到恐怕编辑。

        R命令:

R命令:

       
htmlParse(file,asText=T,encoding=”UTF-8″…) #参数file
即为XML或许HTML文件名可能text,asText参数是T钦定file是text,encoding钦定网页编码情势。

htmlParse(file,asText=T,encoding=”UTF-8″…) #参数file
即为XML或然HTML文件名大概text,asText参数是T钦定file是text,encoding内定网页编码格局。

 

此处大家须求读取网页,并且获得该网页的html树内容

       那里大家需求读取网页,并且获得该网页的html树内容

自定义函数download,输入strU汉兰达L,strU奥迪Q5L为网站,再次回到html树内容

        自定义函数download,输入strUPAJEROL,strU库罗德L为网址,再次来到html树内容

download <- function{
h <- basicTextGatherer# 查看服务器重返的头新闻
txt <- getURL(strURL, headerfunction = h$update,.encoding=”gbk”) ##
字符串格局
htmlParse(txt,asText=T,encoding=”gbk”) #慎选gbk进行网页的辨析
}

            download <- function(strURL){
              h <- basicTextGatherer( )# 查看服务器再次来到的头消息
              txt <- getURL(strURL, headerfunction =
h$update,.encoding=”gbk”) ## 字符串方式
               htmlParse(txt,asText=T,encoding=”gbk”)     
#分选gbk举办网页的剖析
             }

二、获得二个网页全部的U凯雷德L

贰、得到3个网页全数的U智跑L

有时候大家须要进入种种网页上的子链接取分析数据,这一年能够用到XML包的getHTMLLinks函数。

   
有时候大家须求进入各样网页上的子链接取分析数据,今年可以用到XML包的getHTMLLinks函数。

R命令:

    R命令:

getHTMLLinks(doc, xpQuery =
“//a/@href”…)
#doc为分析后的HTML树文件,xpQuery钦点想相称的Xpath成分(上边会详细讲一些Xpath基础)。

        getHTMLLinks(doc,  xpQuery =
“//a/@href”…)
#doc为分析后的HTML树文件,xpQuery内定想匹配的Xpath元素(上边会详细讲一点Xpath基础)。

那里我们须求获得小木虫“导师招生”页面下的兼具话题链接。

    此处大家需求获得小木虫“导师招生”页面下的具有话题链接。

二.一首先大家要博取导师招生的首先页,第二页,第3页,甚至到终极一页的网址。

    二.壹首先大家要获得导师招生的首先页,第3页,第2页,甚至到结尾1页的网站。

先生招生首页

        导师招生首页

澳门葡京官方网站 3

                        澳门葡京官方网站 4

助教招生第3页,第3页。

       导师招生第一页,第二页。

澳门葡京官方网站 5

                      澳门葡京官方网站 6

澳门葡京官方网站 7

                   澳门葡京官方网站 8

发现首页网站是http://muchong.com/html/f430.html,余下的网址符合http://muchong.com/html/f430\_

       
发现首页网站是http://muchong.com/html/f430.html,余下的网址符合http://muchong.com/html/f430\_ 
+   第几页   +.html 

  • 第几页 +.html

        于是网站我们能够手动编辑。

于是网站大家得以手动编辑。

        strURLs=”http://muchong.com/html/f430.html

strURLs=”http://muchong.com/html/f430.html

        n=50

n=50

        strURLs <-
c(strURLs,paste(rep(“http://muchong.com/html/f430\_",n),c(2:n),".html",sep=“”))

strURLs <-
c(strURLs,paste(rep(“http://muchong.com/html/f430\_",n),c,".html",sep=“”))

        strUEscortLs包蕴了具备一到50页导师招生网页的网站。

strU奥迪Q7Ls包蕴了装有一到50页导师招生网页的网站。

    二.二收获每1页导师招生里面三个话题的链接

二.贰取得每1页导师招生里面八个话题的链接

             


澳门葡京官方网站 9

       
在师资招生页面下,有过多话题,大家须求获得各样话题的链接。

http://muchong.com/html/201702/11075436.html

        用getHTMLLinks函数查看导师招生里面装有U中华VL,再对照话题网站。

发现话题网址是组成成分是http://muchong.com/ + html/201702/11075436.html
类似的URL

 

那儿作者利用先从老师招生网页提取全部U路虎极光L,再匹配 html *
.html格式的U大切诺基L,最终再前边加上http://muchong.com/ 的策略。

        澳门葡京官方网站 10

自定义greg函数用海岩则相称,并且得到匹配到的字符串。
greg <- function(pattern,istring){
gregout <- gregexpr(pattern,istring)
#pattern为合营格局,istring为待相配的字符串
substr(istring,gregout[[1]],gregout[[1]]+attr(gregout[[1]],’match.length’)-1)
}

        http://muchong.com/html/201702/11075436.html

自定义extradress函数,用于提取strU奥德赛L网页的中的 ULX570L
,最终处理回来各类话题网页的链接。

        发现话题网站是整合成分是http://muchong.com/ +
html/201702/11075436.html 类似的URL

extradress <- function{
prefix <- “http://muchong.com/
pattern <- “html/[0-9/]+.html”
links <- getHTMLLinks
needlinks <- gregexpr(pattern,links)
needlinkslist <- list()
for (i in which(unlist(needlinks)>0)){
preadress <-
substr(links[i],needlinks[[i]],needlinks[[i]]+attr(needlinks[[i]],’match.length’)-1)
needlinkslist<- c(needlinkslist,list(preadress))
adresses <- lapply(needlinkslist,functionpaste(prefix,x,sep=””))
}
return
}

        这时我利用先从导师招生网页提取全数U瑞鹰L,再相称 html *
.html格式的U翼虎L,最终再后面加上http://muchong.com/ 的策略。

三、从HTML树中获取大家所要的多少

        自定义greg函数用徐婧则相称,并且赢得相称到的字符串。
            greg <- function(pattern,istring){
                gregout <- gregexpr(pattern,istring)  
#pattern为合作形式,istring为待相配的字符串
               
substr(istring,gregout[[1]],gregout[[1]]+attr(gregout[[1]],’match.length’)-1)
             }

** 叁.1 XML文书档案基本知识**

         自定义extradress函数,用于提取strU奇骏L网页的中的 ULX570L
,最后处理回来各种话题网页的链接。

下边是小木虫的有的html:

            extradress <- function(strURL){
                 prefix <- “http://muchong.com/
                 pattern <- “html/[0-9/]+.html”
                 links <- getHTMLLinks(strURL)
                 needlinks <- gregexpr(pattern,links)
                 needlinkslist <- list()
                for (i in which(unlist(needlinks)>0)){
                    preadress <-
substr(links[i],needlinks[[i]],needlinks[[i]]+attr(needlinks[[i]],’match.length’)-1)
                    needlinkslist<-
c(needlinkslist,list(preadress))
                   adresses <-
lapply(needlinkslist,function(x)paste(prefix,x,sep=””))
                 }
                return (adresses)
                 }

澳门葡京官方网站 11

     

html为根成分,head和body是html的子成分,div是body的子成分,div有品质id,style,属性前边对应着属性值。“小木虫—“1行是p成分的公文内容。

3、从HTML树中收获大家所要的多寡

三.二 得到有些成分的始末

    三.壹 XML文书档案基本知识

那边用到XML包中的getNodeSet函数,getNodeSet函数

    下边是小木虫的有的html:

R命令:

 

getNodeSet(doc, path…) #doc
正是html树文件对象,path
正是因素路径。能够用/从根成分一难得钦点路线,也能够用//直接固定到某1层成分。

    澳门葡京官方网站 12

譬如要稳定到html下的body下的div,path
即为/html/body/div,也可//body/div直接从body起先定点。再次回到列表,假如固定到三个要素,将赶回多个成分的列表。此次大家要定为到网页的话题内容:

 

澳门葡京官方网站 13

  
html为根成分,head和body是html的子成分,div是body的子成分,div有品质id,style,属性前边对应着属性值。“小木虫—“一行是p成分的文本内容。

大家那边一向定位到p成分,再从列表中筛选。

    三.2 得到某些成分的内容

先输入指令

       此处用到XML包中的getNodeSet函数,getNodeSet函数

getNodeSet(doc,’//p’)

        R命令:

澳门葡京官方网站 14

        getNodeSet(doc, path…)
#doc 便是html树文件对象,path
便是因素路径。能够用/从根成分一偶发钦命路线,也能够用//直接定位到某1层成分。

getNodeSet(doc,’//p’)[[2]]正是大家必要的内容。

        例如要定位到html下的body下的div,path
即为/html/body/div,也可//body/div直接从body开头定点。重临列表,假如固定到多个因素,将赶回三个要素的列表。此番我们要定为到网页的话题内容:

澳门葡京官方网站 15

 

唯独回去的结果是个指标,要转移为字符串要用到函数xmlValue获得成分值。

                      澳门葡京官方网站 16

xmlValue #
x正是getNodeSet获得的靶子

     大家这里直接定位到p成分,再从列表中筛选。

此处

     先输入指令

 xmlValue(getNodeSet[[2]]) 得到我们所要的内容





 此时,我们获得了每一个话题的内容,我们就可以从内容中提取有效信息,是否招调剂,大学名,导师名字,研究方向,联系人,邮箱,电话等。

      getNodeSet(doc,’//p’)

四、从小木虫获取调剂消息实例

 

本身师妹是生物正式的急需调剂的学员,今后亟需从小木虫网站提取旁人发表的新闻,做成1个报表格局,便于筛选查看和发送邮件。

      澳门葡京官方网站 17

以下是整个代码内容

 

library
library

      getNodeSet(doc,’//p’)[[2]]正是大家需求的始末。

download <- function{
h <- basicTextGatherer()# 查看服务器重回的头音信
txt <- getURL(strURL, headerfunction = h$update,.encoding=”gbk”) ##
字符串情势
htmlParse(txt,asText=T,encoding=”gbk”) #采取gbk举行网页的辨析
}

 

extradress <- function{
prefix <- “http://muchong.com/
pattern <- “html/[0-9/]+.html”
links <- getHTMLLinks
needlinks <- gregexpr(pattern,links)
needlinkslist <- list()
for (i in which(unlist(needlinks)>0)){
preadress <-
substr(links[i],needlinks[[i]],needlinks[[i]]+attr(needlinks[[i]],’match.length’)-1)
needlinkslist<- c(needlinkslist,list(preadress))
adresses <- lapply(needlinkslist,functionpaste(prefix,x,sep=””))
}
return
}

      澳门葡京官方网站 18

gettopic <- function{
xmlValue(getNodeSet(doc,’//p’)[[2]])
}

     

greg <- function(pattern,istring){
gregout <- gregexpr(pattern,istring)
substr(istring,gregout[[1]],gregout[[1]]+attr(gregout[[1]],’match.length’)-1)
}

     
但是回去的结果是个对象,要扭转为字符串要用到函数xmlValue得到成分值。

getinf <- function{
pattern1 <-
“招[\u4E00-\u9FA5]+[0-9-]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*”
pattern2 <-
“([\u4E00-\u9FA5]*课题组|[\u4E00-\u9FA5]*团队)”
pattern21 <- “[\u4E00-\u9FA5]*[:、;,,;]*”
pattern3 <-
“[\u4E00-\u9FA5]*[:、;,,;]*[-A-Za-z0-9_.%]+@[-A-Za-z0-9_.%]+\\.[A-Za-z]+[澳门葡京官方网站,.A-Za-z]*”
#相配@1陆三.com类依旧@abc.edu.cn两类邮箱
pattern4 <- “[\u4E00-\u9FA5]+老师” #匹配某先生
pattern5 <-
“[\u4E00-\u9FA5]*[::]*1[3,5,8]{1}[0-9]{1}[0-9]{8}|0[0-9]{2,3}-[0-9]{7,8}(-[0-9]{1,4})?”
#协作联系人和编号
pattern6 <-
“*[\u4E00-\u9FA5]*为*[:、;,,;]*[\u4E00-\u9FA5]*”
pattern7 <- “[\u4E00-\u9FA5]+(大学|学院|研究院|研究所)”
pattern8
<-“[-A-Za-z0-9_.%]+@[-A-Za-z0-9_.%]+\\.[A-Za-z]+[.A-Za-z]*”
#规范相配邮箱

       xmlValue(x…) #
x正是getNodeSet得到的靶子

cate <- greg(pattern1,topic)
proj <- greg(pattern2,topic)
PI <- greg(pattern21,topic)
email <- greg(pattern3,topic)
man <- greg(pattern4,topic)
phone <- greg(pattern5,topic)
direc <- greg(pattern6,topic)
univ <- greg(pattern7,topic)
print
if (greg(“(分子|生物|植物|细胞|医学|动物|水)+”,topic) !=””){
if (man ==”” && proj != “”){
man <- unlist(strsplit(proj,”课题组”)[1])
}

       此处

if (email != “”){
email <- greg(pattern10,email)
}

  xmlValue(getNodeSet(a,'//p')[[2]]) 得到我们所要的内容


  


   此时,我们获得了每一个话题的内容,我们就可以从内容中提取有效信息,是否招调剂,大学名,导师名字,研究方向,联系人,邮箱,电话等。

data.frame(“类别”=cate,”大学”=univ,”课题”=proj,”PI”=PI,”联系人”=man,”邮箱”=email,”方向”=direc,”电话”=phone)
}
else{
return
}
}

4、从小木虫获取调剂新闻实例

strURLs=”http://muchong.com/html/f430.html
n=50
dat <-
data.frame(“URL”=”URL”,”类别”=”类别”,”大学”=”大学”,”课题”=”课题”,”PI”=”PI”,”联系人”=”联系人”,”邮箱”=”邮箱”,”方向”=”方向”,”电话”=”电话”)
strURLs <-
c(strURLs,paste(rep(“http://muchong.com/html/f430\_",n),c,".html",sep=“”))
output1 <- “a2017.2.21.txt” #未处理数据,用于进一步处理
output2 <- “b2017.2.21.txt” #更为筛选的数码,用于查看

   
作者师妹是生物正式的急需调剂的学员,现在急需从小木虫网址提取外人发布的音讯,做成3个报表情势,便于筛选查看和发送邮件。

for ( strURL in strURLs){
adresses <- extradress
for (adress in adresses){
message
doc <- download
topic <- gettopic
inf <- getinf
if (inf != “”){
URL <- data.frame(“URL”=adress)
inf <- cbind
dat<- rbind
}
}
}

   以下是漫天代码内容

write.table(dat, file = output1, row.names = F, col.names=F,quote = F,
sep=”\t”) # tab 分隔的公文
message

 

dat <- read.table(output1,sep=”\t”,header=T)
dat <- dat[dat$邮箱, ] #删除未有邮箱数据
dat <- dat[!duplicated, ] #剔除重复邮箱数据
dat$index <- as.numeric(rownames
dat <- dat[order(dat$index,decreasing=F),]
#将乱序后的多寡再度依照index排序
dat$index <- NULL
write.table(dat, file = output2, row.names = F, col.names=F,quote = F,
sep=”\t”) # tab 分隔的公文
message

library(RCurl)
library(XML)

最终祝全数报考硕士人都能不负众望被心仪的母校选拔!

download <- function(strURL){
    h <- basicTextGatherer()# 查看服务器重返的头新闻
    txt <- getURL(strURL, headerfunction = h$update,.encoding=”gbk”)
## 字符串形式
    htmlParse(txt,asText=T,encoding=”gbk”)     
#慎选gbk进行网页的解析
}

参考资料:

extradress <- function(strURL){
  prefix <- “http://muchong.com/
  pattern <- “html/[0-9/]+.html”
  links <- getHTMLLinks(strURL)
  needlinks <- gregexpr(pattern,links)
  needlinkslist <- list()
  for (i in which(unlist(needlinks)>0)){
    preadress <-
substr(links[i],needlinks[[i]],needlinks[[i]]+attr(needlinks[[i]],’match.length’)-1)
    needlinkslist<- c(needlinkslist,list(preadress))
    adresses <-
lapply(needlinkslist,function(x)paste(prefix,x,sep=””))
  }
  return (adresses)
}

Rcurl包 :https://cran.r-project.org/web/packages/RCurl/RCurl.pdf

gettopic <- function(doc){
    xmlValue(getNodeSet(doc,’//p’)[[2]])
}

XML包:https://cran.r-project.org/web/packages/XML/XML.pdf

greg <- function(pattern,istring){
    gregout <- gregexpr(pattern,istring)
   
substr(istring,gregout[[1]],gregout[[1]]+attr(gregout[[1]],’match.length’)-1)
}

XML基本知识:http://www.cnblogs.com/thinkers-dym/p/4090840.html

getinf <- function(topic){
pattern1 <-
“招[\u4E00-\u9FA5]+[0-9-]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*[:、;,,;]*[\u4E00-\u9FA5]*(研究生)|(调剂)”
pattern2 <- “([\u4E00-\u9FA5]*课题组|[\u4E00-\u9FA5]*团队)”
 
pattern21 <- “[\u4E00-\u9FA5]*[:、;,,;]*(教授|博士)”
pattern3 <-
“[\u4E00-\u9FA5]*[:、;,,;]*[-A-Za-z0-9_.%]+@[-A-Za-z0-9_.%]+\\.[A-Za-z]+[.A-Za-z]*”
    #相配@16三.com类也许@abc.edu.cn两类邮箱
pattern4 <- “[\u4E00-\u9FA5]+老师”  #十三分某先生
pattern5 <-
“[\u4E00-\u9FA5]*[::]*1[3,5,8]{1}[0-9]{1}[0-9]{8}|0[0-9]{2,3}-[0-9]{7,8}(-[0-9]{1,4})?”
#协作联系人和数码
pattern6 <-
“(主|从事)*[\u4E00-\u9FA5]*(的研究|方向)为*[:、;,,;]*[\u4E00-\u9FA5]*”
pattern7 <- “[\u4E00-\u9FA5]+(大学|学院|研究院|研究所)”
pattern8
<-“[-A-Za-z0-9_.%]+@[-A-Za-z0-9_.%]+\\.[A-Za-z]+[.A-Za-z]*”
#标准匹配邮箱

cate <- greg(pattern1,topic)
proj <- greg(pattern2,topic)
PI <- greg(pattern21,topic)
email <- greg(pattern3,topic)
man <- greg(pattern4,topic)
phone <- greg(pattern5,topic)
direc <- greg(pattern6,topic)
univ <- greg(pattern7,topic)
print(cate)
if (greg(“(分子|生物|植物|细胞|医学|动物|水)+”,topic) !=””){
    if (man ==”” && proj != “”){
        man <- unlist(strsplit(proj,”课题组”)[1])
    }
 
    if (email != “”){
      email <- greg(pattern10,email)
    }
    
   
data.frame(“类别”=cate,”大学”=univ,”课题”=proj,”PI”=PI,”联系人”=man,”邮箱”=email,”方向”=direc,”电话”=phone)
}
else{
  return(“”)
}
}

strURLs=”http://muchong.com/html/f430.html
n=50
dat <-
data.frame(“URL”=”URL”,”类别”=”类别”,”大学”=”大学”,”课题”=”课题”,”PI”=”PI”,”联系人”=”联系人”,”邮箱”=”邮箱”,”方向”=”方向”,”电话”=”电话”)
strURLs <-
c(strURLs,paste(rep(“http://muchong.com/html/f430\_",n),c(2:n),".html",sep=“”))
output1 <- “a2017.2.21.txt” #未处理数据,用于进一步处理
output2 <- “b2017.2.21.txt” #越发筛选的数量,用于查看

for ( strURL in strURLs){
    adresses <- extradress(strURL)
    for (adress in adresses){
      message(adress)
      doc <- download(adress)
      topic <- gettopic(doc)
      inf <- getinf(topic)
      if (inf != “”){
        URL <- data.frame(“URL”=adress)
        inf <- cbind(URL,inf)
        dat<- rbind(dat,inf)
      }
    }
}

write.table(dat, file = output1, row.names = F, col.names=F,quote = F,
sep=”\t”)  # tab 分隔的公文
message(“完成!”)

dat <- read.table(output1,sep=”\t”,header=T)
dat <- dat[dat$邮箱, ] #剔除未有邮箱数据
dat <- dat[!duplicated(dat$邮箱), ]  #除去重复邮箱数据
dat$index <- as.numeric(rownames(dat))
dat <- dat[order(dat$index,decreasing=F),]
#将乱序后的数目重复依据index排序
dat$index <- NULL
write.table(dat, file = output2, row.names = F, col.names=F,quote = F,
sep=”\t”)  # tab 分隔的文本
message(“完成!”)

 

 

提起底祝全体报考学士人都能成功被心仪的学院和学校录取!

 

 

参考资料:

Rcurl包 :https://cran.r-project.org/web/packages/RCurl/RCurl.pdf

XML包:https://cran.r-project.org/web/packages/XML/XML.pdf

XML基本知识:http://www.cnblogs.com/thinkers-dym/p/4090840.html

 

相关文章