目标网站:拉某招聘
实现目标:爬取指定职业指定地区的岗位信息,以及薪资情况
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('爬取成功!!!!!!')