Golang⼁Java⼁Python爬⾍实战—Boss直聘⽹站数据抓取我们分别通过Golang、Python、Java三门语⾔,分别实现对Boss直聘⽹站的招聘数据进⾏爬取。
⾸先打开Boss直聘⽹站:
然后我们在职位类型中输⼊Go或者Golang关键字:python 爬虫教学
然后我们可以看到⼀个列表,和Go语⾔相关的各种招聘职位,还可以不停的下⼀页。。
那我们现在就来爬取这些数据:我们⽐较关⼼这⾥的职位名称,薪资待遇,⼯作地点,对于⼯作经验的要求,学历的要求,公司名称,公司类型,公司发展阶段,公司规模等等。。
⼀、分析页⾯
我们通过分析页⾯的结构发现,页⾯的职位列表,其实都位于⼀个ul中的li⾥,每个页⾯有30个职位,所以有30个li标签:
打开这个li标签后,⾥⾯是div标签嵌套,包括了招聘信息和公司信息:
接下来我们就可以通过代码来爬取这些数据了,⾸先我们要确定要爬取的第⼀个url:
⼀共有10页数据,分别通过page=1、2、3。。。来实现,
所以接下来要爬取的url:
。。。
爬取到的数据,我们也不需要处理,打印输出即可。。因为我们只是想看⼀下⼏门语⾔爬取数据在实现上有什么不同。。
好了,现在让我们来开开⼼⼼的撸代码吧。。
⼆、Golang语⾔实现
使⽤Go语⾔来爬取这个页⾯,github⾥搜了下,发现goquery这个爬⾍包⽤的⼈还挺多的,7000多个star,⽽且是BSD开源协议,于是毫不犹豫的拿来⽤了。
goquery的使⽤还是⽐较简单,按照⽂档说明⼀步⼀步来就可以了:
⾸先:需要安装
localhost:~ ruby$ go get github/PuerkitoBio/goquery
其次:就是去看看goquery的API,先了解⼀下常⽤的⽅法:
然后就可以开始写代码了:
打开Goland,新建⼀个go⽂件: package main
import (
"github/PuerkitoBio/goquery" "log"
"fmt"
"strconv"
"time"
)
func main() {
url := "www.zhipin/c101010100/?query=Go&page="
t := time.Now()
fmt.Println("============== 千锋教育Go语⾔开发教学部职位信息分析 ================")
for offset := 0; offset < 10; offset++ {
time.Sleep(1 * time.Second)
doc, err := goquery.NewDocument(url + strconv.Itoa(offset))
handleErr(err)
fmt.Printf("第 %d 页的数据:\n", offset)
doc.Find(".job-primary").Each(func(i int, selection *goquery.Selection) {
item := Item{}
fmt.Printf("职位序号:第%d个职位\n", (i + 1))
item.position_name = selection.Find("div .job-title").Text()
fmt.Printf("职位名称:%s\n", item.position_name)
item.position_salary = selection.Find("div .red").Text()
fmt.Printf("职位薪酬:%s\n", item.position_salary)
item.work_address = selection.Find(".info-primary p").Children().Nodes[0].PrevSibling.Data
fmt.Printf("⼯作地点:%s\n", item.work_address)
item.work_experience = selection.Find(".info-primary p").Children().Nodes[0].NextSibling.Data
fmt.Printf("职位所需⼯作经历:%s\n", item.work_experience)
item.education = selection.Find(".info-primary p").Children().Nodes[1].NextSibling.Data
fmt.Printf("学历要求:%s\n", item.education)
itempany_name = selection.Find("pany-text .name").Children().First().Text()
fmt.Printf("公司名称:%s\n", item.position_name)
itempany_type = selection.Find("pany-text p").Children().Nodes[0].PrevSibling.Data
fmt.Printf("公司类型:%s\n", itempany_type )
if selection.Find("pany-text p").Children().Size() == 2 {
itempany_development_stage = selection.Find("pany-text p").Children().Nodes[0].NextSibli
ng.Data fmt.Printf("公司发展阶段:%s\n", itempany_development_stage)
itempany_size = selection.Find("pany-text p").Children().Nodes[1].NextSibling.Data
fmt.Printf("公司规模:%s\n", itempany_size )
} else if selection.Find("pany-text p").Children().Size() == 1 {
itempany_size = selection.Find("pany-text p").Children().Nodes[0].NextSibling.Data
fmt.Printf("公司规模:%s\n", itempany_size)
}
fmt.Println("================================================================\n")
})
}
elapsed := time.Since(t)
fmt.Println("app elapsed:", elapsed)
}
type Item struct {
// 职位名称
position_name string
// 职位薪酬
position_salary string
//⼯作地点
work_address string
// 职位所需⼯作经历
work_experience string
/
/ 学历要求
education string
// 公司名称
company_name string
// 公司类型
company_type string
// 公司发展阶段
company_development_stage string
//公司规模
company_size string
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论