某招聘网站招聘信息的爬取

2023-05-10 00:05:34 浏览数 (1)

目标网站:拉某招聘

实现目标:爬取指定职业指定地区的岗位信息,以及薪资情况

1、网页分析

当我们打开网页以后,使用开发者工具,使用定位工具,查看我们所要获取的数据信息是动态加载的还是写在源码中的,我们随便选择一个职业,能够看到我们所要获取的基础信息是写在源码中的一个个div节点下的

那么我们只需要找到正确的类和节点顺序就能用xpath爬取数据信息了

代码语言:javascript复制
url = 'https://www.lagou.com/wn/jobs?pn=1&cl=false&fromSearch=true&city=北京&kd=Python'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
                'Cookie':,
                'Host':'www.lagou.com',
                'Referer':'https://www.lagou.com/common-sec/security-check.html?seed=37CCCED5FE96E9EB070B6942A0C7C31EC256EE7F98EBBC184C8BD2FC69726FE680AC871919B75C4086A8FAE59F4109B1&ts=16836359419409&name=382d3b93f570&callbackUrl=https://www.lagou.com/wn/jobs?kd=Python&city=%E6%88%90%E9%83%BD&srcReferer=https://www.lagou.com/utrack/trackMid.html?f=https%3A%2F%2Fwww.lagou.com%2Fwn%2Fjobs%3Fkd%3DPython%26city%3D%25E6%2588%2590%25E9%2583%25BD&t=1683635940&_ti=1',
                      }
res = requests.get(url,headers=headers)
html = etree.HTML(res.text)

我们打印Html可以看到,我们所需要的数据的确是写在源码中的

获取我们所需要的职业信息

代码语言:javascript复制
title = html.xpath('//*[@id="jobList"]//a[@id="openWinPostion"]/text()')
price = html.xpath('//*[@id="jobList"]//div[1]/div/div[2]/span/text()')
company_name = html.xpath('//*[@id="jobList"]//span/div/div[2]/text()')

这样我们就能获取一页岗位的信息了,那么我们如何实现多页的数据爬取呢

当我们多浏览几页数据,我们可以发现翻页的机密就藏在url之中,每一页的url的不同之处在于pn参数的不同,找到了不同之处,我们就有相应的解决办法了。

我之前看过很多大佬在处理这个问题时是用的for循环,然后把网页链接写在循环当中,如下代码块所示:

代码语言:javascript复制
for i in range(1,5):
    url = f'https://www.lagou.com/wn/jobs?pn={i}&cl=false&fromSearch=true&city={city_name}&kd=Python'

然后再请求数据,但是不知道为什么我在爬取房XX房源网站的时候这样写,最后真正爬取到的网页只有一页,有知道原因的大佬可以在评论区帮我解个惑。本文这样写是可以请求到数据的

我们可以在代码的开头写入input函数,因为网页的链接有pn、city、kd三个参数,他们分别对应着页码信息、城市信息

、职业信息,我们可以手动输入想要获取的职业或者城市,这样我们就能爬取到我们想要的数据了,后续会针对爬取到的信息进行数据分析。

2、全部代码

代码语言:javascript复制
# -*- coding: utf-8 -*-
import csv
import requests
from lxml import  etree
# occupation = input('要爬取的岗位名称:')
city_name = input('要爬取的城市名称是:')
# 爬取一页数据
for i in range(1,6):
    # https://www.lagou.com/wn/jobs?cl=false&fromSearch=true&city=北京&kd=Python&pn=1
    # url = f'https://www.lagou.com/wn/jobs?cl=false&fromSearch=true&city={city_name}&kd=Python&pn={i}'
    url = f'https://www.lagou.com/wn/jobs?pn={i}&cl=false&fromSearch=true&city={city_name}&kd=Python'
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
                'Cookie':,
                'Host':'www.lagou.com',
                'Referer':'https://www.lagou.com/common-sec/security-check.html?seed=37CCCED5FE96E9EB070B6942A0C7C31EC256EE7F98EBBC184C8BD2FC69726FE680AC871919B75C4086A8FAE59F4109B1&ts=16836359419409&name=382d3b93f570&callbackUrl=https://www.lagou.com/wn/jobs?kd=Python&city=%E6%88%90%E9%83%BD&srcReferer=https://www.lagou.com/utrack/trackMid.html?f=https%3A%2F%2Fwww.lagou.com%2Fwn%2Fjobs%3Fkd%3DPython%26city%3D%25E6%2588%2590%25E9%2583%25BD&t=1683635940&_ti=1',
                      }
    # //*[@id="jobList"]//a[@id="openWinPostion"]/text()
    # //*[@id="openWinPostion"]
    res = requests.get(url,headers=headers)
    html = etree.HTML(res.text)
    title = html.xpath('//*[@id="jobList"]//a[@id="openWinPostion"]/text()')
    price = html.xpath('//*[@id="jobList"]//div[1]/div/div[2]/span/text()')
    company_name = html.xpath('//*[@id="jobList"]//span/div/div[2]/text()')
    print(title)
    with open(f'./{city_name}招聘信息.csv','a',encoding='utf-8')as f:
        title_d = csv.writer(f)
        title_d.writerows(title price company_name)
        print('爬取成功!!!!!!')

0 人点赞