本着学习的精神,我就尝试用R语言作为工具,去抓取海投网和应届生的宣讲会信息,然后制作成表格,方便打印出来做记录,时刻提醒自己什么时候有宣讲会,什么时候要开始投递简历了等等。当然我的小程序还不是很健壮,有些功能还不能实现。
罗里吧嗦说了半天,回到正题,我写的这个函数可抓取海投网上19个省区任意页面的宣讲会信息,并返回一个tibble(改进版的data.frame),这个tibble有七列,分别是宣讲学校、公司名称、举办时间、举办点、发布时间、点击率、举办当天是星期几。
我姑且把这个函数叫做ht(prov = "湖北", page = 1 ),有两个参数,第一个是prov省区,支持中文,默认是湖北,第二个参数page是指定抓取指定省区的前多少页(即海投页码)。
下面还是上代码:
- ht <- function(prov='湖北',page=1)
- {
- require(dplyr,quietly =TRUE)
- loc <- switch(prov,
- '湖南' = 'cs',
- '湖北' = 'wh',
- '北京' = 'bj',
- '上海' = 'sh',
- '广东' = 'gz',
- '陕西' = 'xa',
- '四川' = 'cd',
- '江苏' = 'nj',
- '安徽' = 'hf',
- '山东' = 'jn',
- '天津' = 'tj',
- '河南' = 'zz',
- '浙江' = 'hz',
- '重庆' = 'cq',
- '辽宁' = 'sy',
- '福建' = 'fz',
- '江西' = 'nc',
- '吉林' = 'cc',
- '黑龙江' = 'he')
- ht_tb <- data.frame()
- for(i in 1:page){
- page0 <- paste('page',i,sep = '-')
- url <- paste('http://xjh.haitou.cc',loc,page0,sep = '/')
- cat(url,'\n')
- html <- rvest::html_session(url)
- tb_list <- html %>% rvest::html_table()
- tb <- tb_list[[1]] %>%
- lapply(iconv,from='UTF-8',to='gbk') %>%
- tibble::as_tibble()
- names(tb) <- c('宣讲学校','公司名称','举办时间','举办地点','发布时间','点击率','星期')
- web <- rvest::html_nodes(html,"td:nth-child(2)") %>%
- iconv(from='UTF-8',to='gbk')
- univ <- stringr::str_replace_all(stringr::str_extract(web, ":(.*)
- "),':|
- ','')
- tb[[1]] <- univ
- ht_tb <- rbind(ht_tb,tb)
- }
- date <- stringr::str_extract(ht_tb[[3]],'[0-9]{4}-[0-9]{2}-[0-9]{2}\\s[0-9]{2}:[0-9]{2}')
- wenk <- lubridate::wday(date, label = TRUE, abbr = FALSE)
- levels(wenk) <- c('星期日',
- '星期一',
- '星期二',
- '星期三',
- '星期四',
- '星期五',
- '星期六')
- ht_tb[[3]] <- readr::parse_datetime(date)
- ht_tb[[7]] <- wenk
- invisible(ht_tb)
- }
- tb <- ht('湖北', page=10)
- http://xjh.haitou.cc/wh/page-1
- http://xjh.haitou.cc/wh/page-2
- http://xjh.haitou.cc/wh/page-3
- http://xjh.haitou.cc/wh/page-4
- http://xjh.haitou.cc/wh/page-5
- http://xjh.haitou.cc/wh/page-6
- http://xjh.haitou.cc/wh/page-7
- http://xjh.haitou.cc/wh/page-8
- http://xjh.haitou.cc/wh/page-9
- http://xjh.haitou.cc/wh/page-10
- tb
- # A tibble: 200 × 7
- 宣讲学校 公司名称 举办时间
- * <chr> <chr> <dttm>
- 1 华中科技大学 官方推荐京东方科技集团股份有限公司华中大 2016-09-12 15:00:00
- 2 武汉大学 官方推荐江岸区学而思教育培训学校武大 2016-09-12 18:30:00
- 3 华中科技大学 官方推荐江岸区学而思教育培训学校华中大 2016-09-12 18:30:00
- 4 武汉大学 上海倾听信息技术有限公司武大 2016-09-11 09:30:00
- 5 华中科技大学 官方杭州微米网络科技有限公司华中大 2016-09-11 10:00:00
- 6 华中科技大学 华为华中大 2016-09-11 13:30:00
- 7 华中科技大学 招商银行深圳分行华中大 2016-09-11 14:30:00
- 8 华中科技大学 飞利浦医疗科技中国影像基地华中大 2016-09-11 18:30:00
- 9 华中科技大学 热门烽火通信华中大 2016-09-11 18:30:00
- 10 武汉理工大学 官方乐其网络科技有限公司理工大 2016-09-12 10:00:00
- # ... with 190 more rows, and 4 more variables: 举办地点 <chr>, 发布时间 <chr>,
- # 点击率 <chr>, 星期 <ord>
海投网默认是每页显示20条记录,10页就是200条,我们的函数已经帮我抓取回来了。
我知道我的函数还很粗糙,有些地区,如湖南,学校信息匹配会有个别不对,主要是海投网页源代码不一致。
下一步想去抓取应届生校园招聘信息。


雷达卡



京公网安备 11010802022788号







