网络爬虫参考以前的,但是这次对象不一样,为了获取中草药信息,如别名、基源、功效、生境分布、用法用量等。
R语言网络爬虫获取中药材价格信息
爬取百度百科信息,大批量获取专业领域知识,告别ctrl+c/ctrl+v时代,网络爬虫,值得拥有。
R语言爬取PubChem上化合物信息
爬取对象网址
http://www.pharmnet.com.cn/tcm/knowledge/detail/106330.html
查看网址是否允许爬虫:网址后加robots.txt:
http://www.pharmnet.com.cn/robots.txt
结果:
User-Agent:*
Allow:/
01
—
调用包
#以下安装包不能调用的需要手动安装:install.packages("")rm(list=ls())#清除所有变量library(data.table)library(openxlsx)library(stringr)library(stringi)library(VennDiagram)library(RCurl)library(stringr)library(XML)library(downloader)library("dplyr") # 管道操作符所属的包library("rvest") # 本次爬取网页数据的工具在这里
原始资料准备:文件名ID.txt,需要获取的每个中草药ID
#准备文件名为“ID.txt”的文件,文件仅有一列,第一行为“ID”#读取文件ZYID "ID.txt",header = T,stringsAsFactors = F)ZYID"ID")]
开始循环获取资料
#开始循环爬取for(i in 1:nrow(ZYID)){#数据清洗,is.na为判别函数,判断是否为空值: if(is.na(ZYID [i,ID])){ print(paste("处理第",i,"个代号时发现,ID为:",ZYID [i,ID],",已经跳过"))#代号为空时打印:处理第i个代号时发现ID为:ZYID [i,ID]已经跳过 next } else { print(paste("开始处理第",i,"个草药,ID为:",ZYID [i,ID]))#开始处理第i个草药,ID为:ZYID [i,CID] }#下载网页文件file "./",ZYID [i,ID],aurl "http://www.pharmnet.com.cn/tcm/knowledge/detail/",a,#以下5行代码是用于下载html文件,若需要下载可去掉开头的井号符#JudgeHtml#ifelse(JudgeHtml==0,'download.file(url, destfile = file, quiet = TRUE)','F')#如果下载链接可行,就下载,否者退出#ifelse(JudgeHtml==0,Html#cat(ifelse(file.exists(file),"Html文件下载成功!","Html文件下载失败!"))#ZYID [i,"Html"] # 读取网页源码(read_html())web %read_html(encoding = "GBK") # 有时候其他网站是UTF-8是编码方式Title % html_node("h1") %>% html_text()#Detail % html_node("#fontsize") %>% html_text()#ZYID [i,"Title"] ZYID [i,"Detail"] }write.csv(ZYID,file="./ZYID.csv")#导出数据
02
—
结果
3500个大概花费20min
完整代码
#以下安装包不能调用的需要手动安装:install.packages("")rm(list=ls())#清除所有变量library(data.table)library(openxlsx)library(stringr)library(stringi)library(VennDiagram)library(RCurl)library(stringr)library(XML)library(downloader)library("dplyr") # 管道操作符所属的包library("rvest") # 本次爬取网页数据的工具在这里#准备文件名为“ID.txt”的文件,文件仅有一列,第一行为“ID”#读取文件ZYID "ID.txt",header = T,stringsAsFactors = F)ZYID"ID")]#开始循环爬取for(i in 1:nrow(ZYID)){#数据清洗,is.na为判别函数,判断是否为空值: if(is.na(ZYID [i,ID])){ print(paste("处理第",i,"个代号时发现,ID为:",ZYID [i,ID],",已经跳过"))#代号为空时打印:处理第i个代号时发现ID为:ZYID [i,ID]已经跳过 next } else { print(paste("开始处理第",i,"个草药,ID为:",ZYID [i,ID]))#开始处理第i个草药,ID为:ZYID [i,CID] }#下载网页文件file "./",ZYID [i,ID],aurl "http://www.pharmnet.com.cn/tcm/knowledge/detail/",a,#以下5行代码是用于下载html文件,若需要下载可去掉开头的井号符#JudgeHtml#ifelse(JudgeHtml==0,'download.file(url, destfile = file, quiet = TRUE)','F')#如果下载链接可行,就下载,否者退出#ifelse(JudgeHtml==0,Html#cat(ifelse(file.exists(file),"Html文件下载成功!","Html文件下载失败!"))#ZYID [i,"Html"] # 读取网页源码(read_html())web %read_html(encoding = "GBK") # 有时候其他网站是UTF-8是编码方式Title % html_node("h1") %>% html_text()#Detail % html_node("#fontsize") %>% html_text()#ZYID [i,"Title"] ZYID [i,"Detail"] }write.csv(ZYID,file="./ZYID.csv")#导出数据
03
—
结果文件
结果内容都在一个单元格内,再利用EXCEL提取出相应的内容即可。
共获取6800条信息,不重复的有6300条。
想要文件可以联系我