什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(一)

简介: 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(一)

前言

有是小唐的数据分析作业,快别说,这真的历经千辛万苦,我一开始的时候,就真的想着,直接用一个请求然后去前程无忧网爬取,看来网页结构之后,就是两层url,这不对小唐来说just so so,结果,笑死一个是直接给我显示加载中(可以去我的提问那里看),原来是通过js代码读取外部json数据来动态更新的。requests只能获取网页的静态源代码,动态更新的内容取不到。用requests只是获取网页的静态源代码。不会执行页面中的js代码,你用time.sleep()等待是没有用的。只有用selenium 打开真正的浏览器。 才会执行页面中的js代码,用time.sleep()等待才有用。还有就是后面的滑动验证,我直接???,获取数据及其不稳定(主要是他还禁我ip,但是我ip池还不会用呜呜呜呜),后来还是我们的拉勾网香

拉钩网


一、准备我们的库

import re
import xlwt
import requests
from lxml import etree
from xlrd import open_workbook
from xlutils.copy import copy

二、分析分析

对于网站网址的充分了解有利于更加快速的去获取我们所需内容。我们选取的对象是拉钩网(https://www.lagou.com/)进行的数据收集和分析。通过对于网站的分析,本次文章所需的网址结构如下:

这下就好办了,我们看后面固定的网络结构,页面的话只有我们的pn在改变,其他都不要动

City:代表所要工作的城市
Kd: 代表所要选取的行业职位,将选取C/C++开发工程师、Java开发工程师、Python开发工程师、Web、HTML5开发工程师
Gj: 代表所在页面经验

再来看看我们的网页结构

这些就是我们要获取的结构,直接F12,送他回家

小家伙们藏在这里呀。我们可以很清楚的看到,我们的所有的招聘集合是处于class="list__YibNq"之下的,通过Xpath的查找功能可以很方便的帮我们的定位到对应的位置,再在每一条招聘集合中抽丝剥茧,找到对应元素位置,将其整合成数据集。

这样一分析下来,我们的数据获取是不是巨巨巨巨简单!!!,然后在把我们的数据放到Exel里面。把我们的代码加上一点带细节就完成了


三、 代码

import re
import xlwt
import requests
from lxml import etree
from xlrd import open_workbook
from xlutils.copy import copy
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
# url_q="https://www.lagou.com/wn/jobs?px=new&gj=%E5%9C%A8%E6%A0%A1%2F%E5%BA%94%E5%B1%8A&pn="
# url_h="&kd=Java&city=%E5%85%A8%E5%9B%BD"
# url_q="https://www.lagou.com/wn/jobs?px=new&gj=%E5%9C%A8%E6%A0%A1%2F%E5%BA%94%E5%B1%8A&pn="
# url_h="&kd=Python&city=%E5%85%A8%E5%9B%BD"
# url_q="https://www.lagou.com/wn/jobs?px=new&gj=%E5%9C%A8%E6%A0%A1%2F%E5%BA%94%E5%B1%8A&pn="
# url_h="&kd=C%2B%2B&city=%E5%85%A8%E5%9B%BD"
# url_q="https://www.lagou.com/wn/jobs?px=new&gj=%E5%9C%A8%E6%A0%A1%2F%E5%BA%94%E5%B1%8A&pn="
# url_h="&kd=html5&city=%E5%85%A8%E5%9B%BD"
url_q="https://www.lagou.com/wn/jobs?px=new&gj=%E5%9C%A8%E6%A0%A1%2F%E5%BA%94%E5%B1%8A&pn="
url_h="&kd=Python&city=%E5%85%A8%E5%9B%BD"
wb_name='Python.xls'
def spider(base_url,headers):
    response = requests.get(base_url, headers)#构建服务器
    response.encoding = response.apparent_encoding#获取编码格式
    response_text = response.text   # txt化页面内容
    selector = etree.HTML(response_text)#html化
    try:
        job_list=selector.xpath("//div[@class='list__YibNq']/div")
        print(job_list)
        try:
            for job in job_list:
                #岗位
                job_name=job.xpath("//div[@class='p-top__1F7CL']/a/text()[1]")
                # print(job_name)
                #位置
                job_add=job.xpath("//div[@class='p-top__1F7CL']/a/text()[2]")
                # print(job_add)
                #公司名
                job_cp=job.xpath("//div[@class='company-name__2-SjF']/a/text()")
                # print(job_cp)
                #公司现状
                job_cpinfo=job.xpath("//div[@class='industry__1HBkr']/text()")
                # print(job_cpinfo)
                #钱
                job_money=job.xpath("//div[@class='p-bom__JlNur']/span/text()")
                # print(job_money)
                #学历
                job_xl=job.xpath("//div[@class='p-bom__JlNur']/text()")
                # print(job_xl)
                #描述
                job_mess=job.xpath("//div[@class='il__3lk85']/text()")
                # print(job_mess)
                # 需求
                job_ir= job.xpath("//div[@class='ir___QwEG']/span/text()")
            print("解析成功——————开始存储数据")
            save(job_name,job_add,job_cp,job_cpinfo,job_money,job_xl,job_mess,job_ir)
        except BaseException as e:
            print(e)
            print(e.__traceback__.tb_lineno)
            print("本条解析失败,跳过")
    except BaseException as e:
        print(e)
        print(e.__traceback__.tb_lineno)
        print("本页爬取失败,跳过")
def save(name,add,cp,cpinfo,money,xl,mess,ir):
    try:
        r_xls = open_workbook(wb_name)  # 读取excel文件
    except BaseException as e:
        print(e)
        print(e.__traceback__.tb_lineno)
        #没有读取到我们就创建
        file = xlwt.Workbook()
        sheet1 = file.add_sheet(u'表1', cell_overwrite_ok=True)
        sheet1.write(0, 0, "岗位")
        sheet1.write(0, 1, "位置")
        sheet1.write(0, 2, "公司名")
        sheet1.write(0, 3, "公司现状")
        sheet1.write(0, 4, "工资")
        sheet1.write(0, 5, "学历")
        sheet1.write(0, 6, "描述")
        sheet1.write(0, 7, "需求")
        file.save(wb_name)
    try:
        r_xls = open_workbook(wb_name)
        row = r_xls.sheets()[0].nrows  # 获取已有的行数
        excel = copy(r_xls)  # 将xlrd的对象转化为xlwt的对象
        worksheet = excel.get_sheet(0)  # 获取要操作的sheet
        for i in range(0, len(name)):
            worksheet.write(row + i, 0, name[i])
            worksheet.write(row + i, 1, add[i])
            worksheet.write(row + i, 2, cp[i])
            worksheet.write(row + i, 3, cpinfo[i])
            worksheet.write(row + i, 4, money[i])
            worksheet.write(row + i, 5, xl[i])
            worksheet.write(row + i, 6, mess[i])
            worksheet.write(row + i, 7, ir[i])
        excel.save(wb_name)
        print("存储成功")
    except BaseException as e:
        print(e)
        print(e.__traceback__.tb_lineno)
        print("存储失败")
def run():
    for page in range(1,31):
        print("正在解析"+str(page)+"页")
        url=url_q+str(page)+url_h
        print(url)
        spider(url, headers)
run()

四、数据展示


小唐的心路历程

这个是真的,小唐第一次遇到这种网站,之前的51,是真的有被离谱到,给大家看看,我一开始的时候真的以为是显式等待和隐式等待的问题结果。。

就是这个网站或者是通过F12控制台分析页面数据加载的链接,找到真正json数据的地址进行爬取。在页面上点击右键,右键菜单中选 “查看网页源代码”。

本来以为成功了

结果。。。(禁我ip,欺负我不会用ip池)

不过好在问题都解决了,也获得了自己想要的信息,啊哈哈哈哈,爬出来的那一刻真的超级有成就感!!!

相关文章
|
20天前
|
数据采集 文字识别 数据安全/隐私保护
轻松抓取:用 requests 库处理企业招聘信息中的联系方式
本文详细介绍如何利用Python的`requests`库结合代理IP技术,突破Boss直聘的登录验证与反爬虫机制,抓取企业招聘信息中的联系方式。文章首先阐述了Boss直聘数据抓取面临的挑战,随后介绍了代理IP轮换、登录会话保持及请求头伪装等关键技术。通过一个完整的示例代码,展示了从配置代理、模拟登录到解析HTML获取联系方式的具体步骤。此方法不仅适用于Boss直聘,还可扩展至其他需登录权限的网站抓取任务。
轻松抓取:用 requests 库处理企业招聘信息中的联系方式
|
6月前
|
数据采集 数据挖掘
什么你还不知道招聘信息,小唐来教你——最新2021取拉勾网招聘信息(二)
什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(二)
|
数据采集 设计模式 前端开发
实战爬虫:通过联行号轻松获取银行支行信息
经过一段时间的加班,终于是把项目熬上线了。本以为可以轻松一点,但往往事与愿违,出现了各种各样的问题。由于做的是POS前置交易系统,涉及到和商户进件以及交易相关的业务,需要向上游支付机构上送“联行号”,但是由于系统内的数据不全,经常出现找不到银行或者联行号有误等情况,导致无法进件。
实战爬虫:通过联行号轻松获取银行支行信息
|
存储 数据采集 Web App开发
Python爬虫系列2-采集2022年拉钩网最新的IT岗位招聘数据
2022年转眼已过半,再过半年即将迎来2023年,我坚信疫情早晚会过去,2023年相信会是一个互联网全新的时代:物联网时代,古语云:十年磨一剑,古时候烽火传递、飞鸽传书,交流信息很不方便。古人就幻想着有千里眼和顺风耳。能看到千里之外的地方和听到很远地方的声音。从2000年至2010年这十年,古人的愿望变成了现实;我们见证了全智能手机的发展历程;以及2010年至2020年的移动互联网从早期的2G网络过渡至3G到现在的4G网络甚至到目前已经慢慢普及但尚未成熟的5G网络的发展历程;我们也坚信未来的万物互联距离现如今的我们也并不是一件很遥远的事情。 如果本文对你有些帮助-还请点赞👍关注!
Python爬虫系列2-采集2022年拉钩网最新的IT岗位招聘数据
|
数据库 数据安全/隐私保护 Python
【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)
【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)
【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)
|
数据采集 存储 数据可视化
我爬取了爬虫岗位薪资,分析后发现爬虫真香
闲着无事逛逛招聘网站,无意看到了爬虫岗位的薪资,发现真香,今天决定爬取下来并进行分析
166 0
|
数据采集 Python
Python爬虫:scrapy爬取腾讯社招职位信息
Python爬虫:scrapy爬取腾讯社招职位信息
214 0
|
存储 数据采集 大数据
网站限制爬取薪资信息,代理IP来助阵
换工作需要知道该岗位目前市场薪资信息,企业招聘也需要知道各岗位当前薪资福利情况,这些情况是怎么分析出来的呢?这就要用到大数据了。但是,网站限制爬取薪资信息,面对这种情况可以使用代理IP来助阵的,就像芝麻代理的使用,方便快捷。
1076 0
|
搜索推荐 算法 UED
如何筛选和招聘最好的SEO内容作家
如何筛选和招募最佳SEO内容作家 找到作家很容易; 它们无处不在。 但雇用最好的?这是营销人员和企业主面临的艰巨任务。而且你不仅需要作家,还需要特殊的SEO内容作家。 算法更新如何传达了百度对优秀SEO作者的偏好: 如果你经常阅读排名第一SEO的文章,你可能知道百度算法是如何工作的,算法更新使百度几乎与人类一样聪明 – 在选择最相关和高质量的内容时,在搜索引擎结果页面的第1页上排名。
963 0
新手向- 爬取分析拉勾网招聘信息
[TOC] 爱写bug(ID:icodebugs) 作者:爱写bug 前言: ​ 看了很多网站,只发现获取拉勾网招聘信息是只用post方式就可以得到,应当是非常简单了。推荐刚接触数据分析和爬虫的朋友试一下。
1807 0