拉勾爬虫项目

5 篇文章 0 订阅
4 篇文章 0 订阅

拉勾爬虫-仅供学习使用

今天要进行爬取的网站是拉勾招聘网站
首先,我们要对网站进行分析,经过我们的一翻页面分析,我们找到了数据存储的地方所在,如图:
在这里插入图片描述
知道了数据所在,我们就开始分析这个页面的链接信息:
在这里插入图片描述
可以看出,这个是网页是使用post请求的,既然是post请求,就一定有表单数据的,所以我们接着往下面看:
在这里插入图片描述
这里就是表单数据了。拉勾的关键词和翻页都说由这个表单数据进行控制的,所以我们只要构建好这个表单,拉勾的数据就可以提取到了。不过我们这里拿到的数据只是表面的数据,要想进入到详情页,我们还需要构建详情页的链接。
在这里插入图片描述
这个’positionId’就是进入详情页的关键,只要我们将获取到的’positionId‘进行构建链接,就能成功进入到详情页了。
最后,我们把获取后的数据保存在csv文件就好
页面分析就到这里了,接下来的时间就交给代码了。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# @Version : 1.0
# @Author  : 渔戈
# @File    : 拉钩.py

#导入文件所需要的库
import requests
import time
import json
import csv
from lxml import etree
import parsel

#构建请求头信息
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36',
    'referer':'https://www.lagou.com/jobs/list_%E5%A4%A7%E6%95%B0%E6%8D%AE?labelWords=&fromSearch=true&suginput='

}

#创建csv文件
fp = open('data.csv','a',encoding='utf-8-sig',newline='')
writer = csv.writer(fp)
header = ['positionName','companyFullName','companySize','city','salary','education','workYear','skillLables','createTime','position_tempt','position_describe','location','url']
writer.writerow(header)


def lagou(i,kd):
    #构建data参数
    data = {
        'first':'true',
        'pn':i,
        'kd':kd
    }

    while True:
        #获取cookies信息
        url = 'https://www.lagou.com/jobs/list_%E5%A4%A7%E6%95%B0%E6%8D%AE?labelWords=&fromSearch=true&suginput='
        response = requests.get(url,headers=headers)
        cookies = response.cookies
        print(cookies)
        print(len(cookies))
        if len(cookies) == 0:
            print('cookies信息获取错误,正在重新获取,请等待')
            time.sleep(2)
            continue
        elif len(cookies) == 1:
            print('cookies信息获取错误,正在重新获取,请等待')
            time.sleep(2)
            continue
        else:
            break
    #json数据链接
    json_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
    response = requests.post(json_url,data=data,headers=headers,cookies=cookies)
    # print(response.text)
    contents = json.loads(response.text)['content']['positionResult']['result']#json反序列化

    #提取数据
    for content in contents:
        positionId = content['positionId']#职位id
        positionName = content['positionName']#职位名字
        companyFullName = content['companyFullName']#公司全称
        companySize = content['companySize']#公司规模
        city = content['city']#城市
        salary = content['salary']#薪资
        education = content['education']#学历
        workYear = content['workYear']#工作经验
        skillLables = content['skillLables']#技能要求(是一个列表数据)
        skillLables = ' '.join(skillLables)#将列表转成字符串
        createTime = content['createTime']#发布时间
        data = [positionName, companyFullName, companySize, city, salary, education, workYear, skillLables, createTime]
        print(positionName, companyFullName, companySize, city, salary, education, workYear, skillLables, createTime)
        get_detail_information(positionId,data)


def get_detail_information(positionId,data):
    while True:
        #获取cookies信息
        url = 'https://www.lagou.com/jobs/list_%E5%A4%A7%E6%95%B0%E6%8D%AE?labelWords=&fromSearch=true&suginput='
        response = requests.get(url,headers=headers)
        cookies = response.cookies
        # print(cookies)
        # print(len(cookies))
        if len(cookies) == 0:
            print('cookies信息获取错误,正在重新获取,请等待')
            time.sleep(2)
            continue
        elif len(cookies) == 1:
            print('cookies信息获取错误,正在重新获取,请等待')
            time.sleep(2)
            continue
        else:
            break
    ur = 'https://www.lagou.com/jobs/{}.html?'.format(positionId)
    response = requests.get(url=ur, cookies=cookies,headers=headers, timeout=3)
    time.sleep(2)
    html = parsel.Selector(response.text)
    position_tempt = html.xpath("//dd[@class='job-advantage']/p/text()").get()  # 职位诱惑
    position_describe = ''.join(html.xpath("//div[@class='job-detail']/p/text()").getall())  # 职位描述
    location = '-'.join(html.xpath("//div[@class='work_addr']/a/text()").getall()).strip('-查看地图')  # 公司地址
    url = html.xpath("//div[@class='content_r']/dl[@class='job_company']/dt/a/@href").get()  # 公司信息链接

    #打印数据
    print(position_tempt,position_describe,location,url)
    # 将数据写入csv文件
    writer.writerow(data+[position_tempt,position_describe,location,url])

if __name__ == '__main__':
    kds = ['python', 'java', '前端','自动化','数据分析','大数据','测试','运维','c++','人工智能','算法']#构建关键词
    for kd in kds:
        print('正在采集{}的数据'.format(kd))
        pags = int(input('请输入你所要采集的页数:'))
        for i in range(1,pags+1):#构建爬取的页数
            print('正在采集第{}页数据'.format(i))
            lagou(i,kd)

爬取完数据后,我们需要进行数据进行清洗,然后进行分析画图。
分析如下(分析仅供参考):
学历与招聘公司的关系:
在这里插入图片描述

从我们爬取的那些数据来看,本科学历的就职者是最多的,专科的招聘人数相对较少,硕士最少。这个当然不能说明硕士找不到工作,毕竟我们爬的数据不大,得到的结论是有所偏差的。但是还是建议专科的学生可以考虑进行升本,提高自己的行业竞争力。
招聘职位:
在这里插入图片描述
从图中可以看出,测试工程师的职位是相对较多的,python爬虫工程师的招聘岗位相对较少,我们可以学些测试的技术,多一门技术,多一份就业选择。
技能要求:
在这里插入图片描述
从这个技能要求的饼图来看:后端和python是很多公司要求掌握的,mysql相对较少。当然我们采集的数据并不全面,所以这里的分析仅供参考。
各地平均薪资:
在这里插入图片描述
由图看出,北京、上海、深圳、杭州的薪资是较高的(海外除外,这里海外的招聘薪资不参与讨论)需要找工作的学生可以多往这几个城市考虑,毕竟薪资较高,但相应的日常花销也会较大。
本次项目到此结束,这里的数据分析可能存在偏差,各位不要介意,因只是学习使用,并没有爬取太多的招聘数据来进行分析。
感谢各位大大观看!喜欢的请点个赞呗!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔戈

创作不易,如有帮助,请鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值