利用R通过顺企网根据公司名称爬取企业地址

利用R通过顺企网根据公司名称爬取企业地址

有时我们有公司名称数据但是没有地址,需要根据公司名称找出企业的地址,描述其空间布局,如果数据量很大,手动在网页中操作费时费力,R语言提供了一个解决的办法,前提是该网站能够与机器交互(即没有反爬机制,或者有但限制较小)。其过程如下

1. 首先读取数据并作简单处理
打开顺企网检索某个公司利用R通过顺企网根据公司名称爬取企业地址_第1张图片

发现其链接是以下形式,其特征是字符串+“公司名称”构成了一个完整的链接
在这里插入图片描述
因此可以对每个公司名称构建url地址,然后根据url地址获取页面信息

#library packeges
> library(readxl)
> library(xml2)
> library(rvest)
> library(stringr)
> #import data
> qy <- read_xlsx("qy_sample.xlsx")
New names:
 1. `2016母公司` -> `2016母公司...2`
 2. `2016母公司` -> `2016母公司...3`
> qy <- qy[,4]
> names(qy) <- "name"
> #delete repeated data
> qy <- qy[!duplicated(qy),]
> qy$ul <- "http://so.11467.com/cse/search?s=662286683871513660&ie=utf-8&q="
> qy$url <- paste(qy$ul,qy$name,sep = "")
> qy <- qy[,c(1,3)]
> head(qy)
# A tibble: 6 x 2
  name                      url                                                                  
  <chr>                     <chr>                                                                
1 宁波横河模具股份有限公司  http://so.11467.com/cse/search?s=662286683871513660&ie=utf-8&q=宁波横河模~
2 深圳市朗科智能电气股份有限公司~ http://so.11467.com/cse/search?s=662286683871513660&ie=utf-8&q=深圳市朗科~
3 深圳市联得自动化装备股份有限公司~ http://so.11467.com/cse/search?s=662286683871513660&ie=utf-8&q=深圳市联得~
4 武汉理工光科股份有限公司  http://so.11467.com/cse/search?s=662286683871513660&ie=utf-8&q=武汉理工光~
5 深圳市科信通信技术股份有限公司~ http://so.11467.com/cse/search?s=662286683871513660&ie=utf-8&q=深圳市科信~
6 武汉精测电子集团股份有限公司~ http://so.11467.com/cse/search?s=662286683871513660&ie=utf-8&q=武汉精测电~

2. 根据url地址爬取页面信息
其代码如下:

#create for circulation
n <- length(qy$name)
url_sec <- data.frame()

for (i in 1:n) {
  url_i <- read_html(qy$url[i],encoding = "UTF-8") %>% html_nodes(".c-title") %>%html_children() %>% 
    html_attrs()  %>% data.frame() %>% t()
  url.sec_i <- url_i[1,3]
  name_i <- qy[i,1]
  da_i <- cbind(name_i,url.sec_i)
  url_sec <- rbind(url_sec,da_i)
  print(i)
  print(name_i)
}

但是我们只爬取了以下页面信息,还没有获取需要的公司地址信息
利用R通过顺企网根据公司名称爬取企业地址_第2张图片
最匹配的往往是第一个,然我们尝试打开第一个结果
利用R通过顺企网根据公司名称爬取企业地址_第3张图片
可以看出这个页面的信息正是我们需要的!第二步已经提取了每个公司的页面地址,因此通过二次爬虫即可。

#create for circulation again
n.1 <- length(url_sec$name)
qy.da <- data.frame()
for (i in 1:n.1) {
  address.1_i <- read_html(url_sec$url.sec_i[i],encoding = "UTF-8") %>% 
    html_nodes(".codl") %>% html_text()
  address_i <- address.1_i[1]
  name_i <- url_sec$name[i]
  qy.da_i <- cbind(name_i,address_i)
  qy.da <- rbind(qy.da,qy.da_i)
  print(i)
  print(name_i)
}

其结果如下:
利用R通过顺企网根据公司名称爬取企业地址_第4张图片
然后提取其中的公司地址,最后根据公司名称与原表匹配即可,匹配问题可参考以前写的文章。

你可能感兴趣的:(R爬虫)