Python 爬虫实战案例 - 获取拉勾网雇用职位信息

  金牌会员 | 2025-3-12 14:26:11 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 978|帖子 978|积分 2934

弁言

拉勾网,作为互联网雇用领域的佼佼者,汇聚了海量且多样的职位雇用信息。这些信息涵盖了从新兴科技领域到传统行业转型所需的各类岗位,无论是初出茅庐的应届生,照旧履历丰富的职场老手,都能在此中探寻到时机。
对于求职者而言,可以或许快速、全面地把握雇用职位的详细情况,如薪资报酬的高低、工作地点的便利性、职位形貌所要求的技能与职责等,无疑能在求职路上抢占先机。而企业方,通过分析偕行业职位信息的发布趋势、薪资水平的波动,也可为订定更具吸引力的雇用策略提供有力依据。
接下来,就让我们看看怎样运用 Python 爬虫从拉勾网获取关键的雇用信息。
目录
一、实战目的
二、技能路线
三、数据爬取
3.1 网页分析
3.2 网页请求
3.3 网页解析
3.4 生存数据
总结

一、实战目的

本次实战的核心目的是精准抓取拉勾网特定职位的关键雇用信息。具体而言,要获取的信息涵盖:职位名称,它如同求职路上的指南针,能让求职者迅速定位职业方向;薪资范围,这是求职者关注的重点,也是权衡自身代价与市场行情的关键标尺;公司名称,背后关联着企业的规模、文化与发展前景;
二、技能路线

requests:用于发送HTTP请求,获取网页内容。
BeautifulSoup:用于解析HTML页面,提取所需的信息。
csv:用于将爬取的数据存储为CSV文件,便于后续分析。
三、数据爬取

3.1 网页分析

拉勾网的职位列表页,清晰明白的卡片式计划呈现了众多雇用信息,关键数据一目了然。细致观察其 URL,不难发现此中蕴含的规律,如职位关键词、城市代码、页码等参数奇妙嵌入,以 “https://www.lagou.com/wn/jobsfromSearch=true&kd=python&pn=1&city=%E8%A5%BF%E5%AE%89” 职位关键词 /city = 城市代码、kd = 关键职位、pn = 页码” 为例,这种结构为精准定位差别职位、差别地域的雇用页面提供了线索,pn 参数可以协助我们获取多分页的信息。

分析后我们可以知道,职位信息都在class_=‘item__10RTO’ 的div元素下,可以通过id=‘openWinPostion’、class_=‘money__3Lkgq’、class_=‘company-name__2-SjF’ 来分别获取职位名称、薪资范围和公司名称。
3.2 网页请求

在 Python 的工具库中,requests 库能高效地向目的网站发送 HTTP 请求,帮我们牵线搭桥获取网页内容。不过,拉勾网为了维护自身数据的有序访问,设置了一些防护机制,我们得像智慧的访客一样奇妙应对。
起首,合理设置请求头(headers)至关重要,它就像是我们拜访网站时递出的名片,告知对方我们是友爱且正常的浏览器访问。模拟常见浏览器的 User-Agent 字段,如 “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36”,让服务器误以为我们是平凡用户操作。同时,Referer 字段也不可忽视,它记载着请求的泉源页面,保持其合理性,能避免一些不必要的拦截。末了,如果网站有动态验证的话我们需要设置 Cookie ,可以从自己浏览器访问记载中找到Cookie参数。
  1. # 拉勾网职位招聘信息爬取与数据分析
  2. import requests
  3. # 模拟浏览器头部信息
  4. headers = {
  5.     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
  6.     "Referer": "https://www.lagou.com/jobs/list_python?px=default",
  7.     "Cookie": "index_location_city=%E5%85%A8%E5%9B%BD; user_trace_token=20250104093938-902c4ff5-f24c-45e5-aec2-3d1473035947; __lg_stoken__=a8290517006006e881e7779a471d837c8e507eea47d1d1fa6cc1ad03ccb44cefb814362b5ac691966eb8697d786c6e53e4f6c233c3d4eaa9ba7c50ac63afc8f768fef09ed4ae; JSESSIONID=ABAACCCABBFAAGBFE0BC31D870268EB481847F272508F4B; WEBTJ-ID=20250104094035-1942ef8a924bd-0dd7463ae6d789-26001851-1049088-1942ef8a9253d2; LGUID=20250104093941-930407fa-f7e8-4c42-81fc-756f97aefcb1; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1735954836; HMACCOUNT=D7BB61FCD5F74C1A; sajssdk_2015_cross_new_user=1; _ga=GA1.2.694435554.1735954836; _gid=GA1.2.74502511.1735954836; X_MIDDLE_TOKEN=bd70439f6dca25617ea4b718273bbf6d; SEARCH_ID=6e9a4c0e27e34ae3929ec6c60a10d1f7; X_HTTP_TOKEN=1226f88b1a607ea4951559537134b7e1ae0350e7f1; sensorsdata2015session=%7B%7D; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1735955277; LGRID=20250104094702-51a5d712-8f33-46b0-a616-3b54c420e4a4; _ga_DDLTLJDLHH=GS1.2.1735954837.1.1.1735955277.60.0.0; gate_login_token=v1####df3b53f43f17d1db42f281952270b469e8255336da4736f3; LG_LOGIN_USER_ID=v1####5496aa08cbf5a8587c4797982411a6af15950cd637352b0a; LG_HAS_LOGIN=1; _putrc=B6E2CB0ECCED9CDE; login=true; unick=%E7%94%B3%E7%99%BB%E5%B3%B0; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=0; privacyPolicyPopup=true; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221942ef8ab81cd-06cd07b2b912ae-26001851-1049088-1942ef8ab822d7%22%2C%22%24device_id%22%3A%221942ef8ab81cd-06cd07b2b912ae-26001851-1049088-1942ef8ab822d7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24os%22%3A%22Windows%22%2C%22%24browser%22%3A%22Chrome%22%2C%22%24browser_version%22%3A%22121.0.0.0%22%7D%7D"
  8. }
  9. # 目标URL,以Python职位为例,搜索西安地区,第一页数据,pn为页码,kd为职位关键词
  10. url = "https://www.lagou.com/wn/jobs?fromSearch=true&kd=python&pn=1&city=%E8%A5%BF%E5%AE%89"
  11. # 发送get请求,获取响应
  12. res = requests.get(url, headers=headers)
  13. html = res.text
  14. print(html)
复制代码
在这段代码中,我们经心构建了请求头和请求参数,并发起 GET请求,若请求顺利,便能获得网页数据,为后续的数据解析铺就门路。
3.3 网页解析

当我们乐成取回网页的 HTML 内容,需要合适的工具来解读此中的奥秘。在这里,我们使用BeautifulSoup来获取想要的信息。我们已获取到拉勾网职位列表页的 HTML 内容,存储在变量 html 中,提取职位名称、薪资、公司名称等信息的代码如下:
  1. from bs4 import BeautifulSoup
  2. job_list = []
  3. # 创建BeautifulSoup对象,选用html.parser解析器
  4. soup = BeautifulSoup(html, 'html.parser')
  5. # 查找所有职位列表项
  6. job_list_items = soup.find_all('div', class_='item__10RTO')
  7. for item in job_list_items:
  8.     # 提取职位名称
  9.     job_title = item.find(id='openWinPostion').text.strip()
  10.     # 提取薪资范围
  11.     salary = item.find('span', class_='money__3Lkgq').text.strip()
  12.     # 提取公司名称
  13.     company_name = item.find('div', class_='company-name__2-SjF').text.strip()
  14.     # 将职位信息写入列表
  15.     job_list.append({"job_title": job_title, "salary": salary, "company_name": company_name})
  16. print(job_list)
复制代码
在这段代码里,我们先创建了 BeautifulSoup 对象,然后界说了列表用于临时存储职位信息,接着使用 find_all 方法依据类名找出所有职位列表项,再深入每个列表项,通过标签与属性的组合,精准抓取职位名称、薪资、公司名称等关键信息,将其清晰呈现。

3.4 生存数据

辛劳抓取并解析得到的数据,需要妥善生存才气让其代价延续。常见的 CSV、JSON 等格式,各有千秋。
CSV 格式,以其简便的表格形式,通用性强,能被 Excel 等众多软件直接打开编辑,方便数据的开端查看与简朴分析。Python 内置的 csv 模块便能担此大任。以下是将获取到的拉勾网职位数据生存为 CSV 文件的示例:
  1. import csv
  2. # CSV文件路径
  3. csv_file_path = "lagou_jobs.csv"
  4. # 写入CSV文件
  5. with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
  6.     fieldnames = ['job_title', 'salary', 'company_name']  # 定义列名
  7.     writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
  8.     writer.writeheader()  # 写入表头
  9.     writer.writerows(job_list)  # 写入数据行
  10. print(f"数据已成功保存至 {csv_file_path}")
复制代码
在这段示例中,我们起首界说了 CSV 文件路径,运用 csv.DictWriter 以字典形式将数据逐行写入 CSV 文件,同时写入表头,确保数据存储的规范性与完备性,方便后续随时调取分析。

末了对代码进行整理优化,并增长多页面处置处罚。
  1. # 爬取拉勾网职位招聘信息
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import csv
  5. def get_html(url):
  6.     # 模拟浏览器头部信息
  7.     headers = {
  8.         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
  9.         "Referer": "https://www.lagou.com/jobs/list_python?px=default",
  10.         "Cookie": "index_location_city=%E5%85%A8%E5%9B%BD; user_trace_token=20250104093938-902c4ff5-f24c-45e5-aec2-3d1473035947; __lg_stoken__=a8290517006006e881e7779a471d837c8e507eea47d1d1fa6cc1ad03ccb44cefb814362b5ac691966eb8697d786c6e53e4f6c233c3d4eaa9ba7c50ac63afc8f768fef09ed4ae; JSESSIONID=ABAACCCABBFAAGBFE0BC31D870268EB481847F272508F4B; WEBTJ-ID=20250104094035-1942ef8a924bd-0dd7463ae6d789-26001851-1049088-1942ef8a9253d2; LGUID=20250104093941-930407fa-f7e8-4c42-81fc-756f97aefcb1; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1735954836; HMACCOUNT=D7BB61FCD5F74C1A; sajssdk_2015_cross_new_user=1; _ga=GA1.2.694435554.1735954836; _gid=GA1.2.74502511.1735954836; X_MIDDLE_TOKEN=bd70439f6dca25617ea4b718273bbf6d; SEARCH_ID=6e9a4c0e27e34ae3929ec6c60a10d1f7; X_HTTP_TOKEN=1226f88b1a607ea4951559537134b7e1ae0350e7f1; sensorsdata2015session=%7B%7D; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1735955277; LGRID=20250104094702-51a5d712-8f33-46b0-a616-3b54c420e4a4; _ga_DDLTLJDLHH=GS1.2.1735954837.1.1.1735955277.60.0.0; gate_login_token=v1####df3b53f43f17d1db42f281952270b469e8255336da4736f3; LG_LOGIN_USER_ID=v1####5496aa08cbf5a8587c4797982411a6af15950cd637352b0a; LG_HAS_LOGIN=1; _putrc=B6E2CB0ECCED9CDE; login=true; unick=%E7%94%B3%E7%99%BB%E5%B3%B0; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=0; privacyPolicyPopup=true; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221942ef8ab81cd-06cd07b2b912ae-26001851-1049088-1942ef8ab822d7%22%2C%22%24device_id%22%3A%221942ef8ab81cd-06cd07b2b912ae-26001851-1049088-1942ef8ab822d7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24os%22%3A%22Windows%22%2C%22%24browser%22%3A%22Chrome%22%2C%22%24browser_version%22%3A%22121.0.0.0%22%7D%7D"
  11.     }
  12.     # 发送get请求,获取响应
  13.     res = requests.get(url, headers=headers)
  14.     html = res.text
  15.     if res.status_code == 200:
  16.         print(f"请求成功,状态码:{res.status_code}")
  17.     else:
  18.         print(f"请求失败,状态码:{res.status_code}")
  19.     return html
  20. def get_alljobs(html):
  21.     job_list = []
  22.     # 创建BeautifulSoup对象,选用html.parser解析器
  23.     soup = BeautifulSoup(html, 'html.parser')
  24.     # 查找所有职位列表项
  25.     job_list_items = soup.find_all('div', class_='item__10RTO')
  26.     for item in job_list_items:
  27.         # 提取职位名称
  28.         job_title = item.find(id='openWinPostion').text.strip()
  29.         # 提取薪资范围
  30.         salary = item.find('span', class_='money__3Lkgq').text.strip()
  31.         # 提取公司名称
  32.         company_name = item.find('div', class_='company-name__2-SjF').text.strip()
  33.         # 将职位信息写入列表
  34.         job_list.append({"job_title": job_title, "salary": salary, "company_name": company_name})
  35.     return job_list
  36. def save_to_csv(job_list):
  37.     # CSV文件路径
  38.     csv_file_path = "lagou_jobs.csv"
  39.     # 写入CSV文件
  40.     with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
  41.         fieldnames = ['job_title', 'salary', 'company_name']  # 定义列名
  42.         writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
  43.         writer.writeheader()  # 写入表头
  44.         writer.writerows(job_list)  # 写入数据行
  45.     return f"数据已成功保存至 {csv_file_path}"
  46. if __name__ == "__main__":
  47.     # 目标URL,以Python职位为例,搜索西安地区,第一页数据,pn为页码,kd为职位关键词
  48.     base_url = "https://www.lagou.com/wn/jobs?fromSearch=true&kd=python&city=%E8%A5%BF%E5%AE%89"
  49.     # 配置页码数量
  50.     num_pages = 3
  51.     # 定义一个空列表,存储所有的职位
  52.     jobs = []
  53.     for i in range(1, num_pages+1):
  54.         url = f"{base_url}&pn={i}"
  55.         html = get_html(url)
  56.         job_list = get_alljobs(html)
  57.         jobs.extend(job_list)
  58.     save_to_csv(jobs)
  59.     print("爬取完成,数据已保存至 lagou_jobs.csv")
复制代码
总结

本文通过详细步调展示了怎样使用Python爬取拉勾网的职位雇用信息。我们使用了requests、BeautifulSoup、csv等常见库完成拉勾网数据的抓取、解析与存储,而且介绍了怎样处置处罚反爬虫机制、分页题目以及数据存储。
在享受爬虫技能带来便利的同时,务必铭记要遵循网站规则。合理设置爬取频率,模拟真实用户行为,不恶意打击服务器;尊重网站的 robots.txt 协议,不越界访问克制地区。只有如此,才气确保爬虫技能在正当合规的轨道上稳健前行,实现数据获取与网站运营的和谐共生。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表