目标网站:拉某招聘
实现目标:爬取指定职业指定地区的岗位信息,以及薪资情况
1、网页分析
当我们打开网页以后,使用开发者工具,使用定位工具,查看我们所要获取的数据信息是动态加载的还是写在源码中的,我们随便选择一个职业,能够看到我们所要获取的基础信息是写在源码中的一个个div节点下的
那么我们只需要找到正确的类和节点顺序就能用xpath爬取数据信息了
url = 'https://www.lagou.com/wn/jobs?pn=1&cl=false&fromSearch=true&city=%E5%8C%97%E4%BA%AC&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%3A%2F%2Fwww.lagou.com%2Fwn%2Fjobs%3Fkd%3DPython%26city%3D%25E6%2588%2590%25E9%2583%25BD&srcReferer=https%3A%2F%2Fwww.lagou.com%2Futrack%2FtrackMid.html%3Ff%3Dhttps%253A%252F%252Fwww.lagou.com%252Fwn%252Fjobs%253Fkd%253DPython%2526city%253D%2525E6%252588%252590%2525E9%252583%2525BD%26t%3D1683635940%26_ti%3D1',
}
res = requests.get(url,headers=headers)
html = etree.HTML(res.text)
我们打印Html可以看到,我们所需要的数据的确是写在源码中的
获取我们所需要的职业信息
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循环,然后把网页链接写在循环当中,如下代码块所示:
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、全部代码
# -*- 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=%E5%8C%97%E4%BA%AC&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%3A%2F%2Fwww.lagou.com%2Fwn%2Fjobs%3Fkd%3DPython%26city%3D%25E6%2588%2590%25E9%2583%25BD&srcReferer=https%3A%2F%2Fwww.lagou.com%2Futrack%2FtrackMid.html%3Ff%3Dhttps%253A%252F%252Fwww.lagou.com%252Fwn%252Fjobs%253Fkd%253DPython%2526city%253D%2525E6%252588%252590%2525E9%252583%2525BD%26t%3D1683635940%26_ti%3D1',
}
# //*[@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('爬取成功!!!!!!')
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。