iis怎么加载网站,印刷网站源码,桑福生物科技网站开发,化工行业网站设计引言
拉勾网#xff0c;作为互联网招聘领域的佼佼者#xff0c;汇聚了海量且多样的职位招聘信息。这些信息涵盖了从新兴科技领域到传统行业转型所需的各类岗位#xff0c;无论是初出茅庐的应届生#xff0c;还是经验丰富的职场老手#xff0c;都能在其中探寻到机遇。
对…引言
拉勾网作为互联网招聘领域的佼佼者汇聚了海量且多样的职位招聘信息。这些信息涵盖了从新兴科技领域到传统行业转型所需的各类岗位无论是初出茅庐的应届生还是经验丰富的职场老手都能在其中探寻到机遇。
对于求职者而言能够快速、全面地掌握招聘职位的详细情况如薪资待遇的高低、工作地点的便利性、职位描述所要求的技能与职责等无疑能在求职路上抢占先机。而企业方通过分析同行业职位信息的发布趋势、薪资水平的波动也可为制定更具吸引力的招聘策略提供有力依据。
接下来就让我们看看如何运用 Python 爬虫从拉勾网获取关键的招聘信息。
目录
一、实战目标
二、技术路线
三、数据爬取
3.1 网页分析
3.2 网页请求
3.3 网页解析
3.4 保存数据
总结 一、实战目标
本次实战的核心目标是精准抓取拉勾网特定职位的关键招聘信息。具体而言要获取的信息涵盖职位名称它如同求职路上的指南针能让求职者迅速定位职业方向薪资范围这是求职者关注的重点也是衡量自身价值与市场行情的关键标尺公司名称背后关联着企业的规模、文化与发展前景
二、技术路线
requests用于发送HTTP请求获取网页内容。
BeautifulSoup用于解析HTML页面提取所需的信息。
csv用于将爬取的数据存储为CSV文件便于后续分析。
三、数据爬取
3.1 网页分析
拉勾网的职位列表页清晰明了的卡片式设计呈现了众多招聘信息关键数据一目了然。仔细观察其 URL不难发现其中蕴含的规律如职位关键词、城市代码、页码等参数巧妙嵌入以 “https://www.lagou.com/wn/jobsfromSearchtruekdpythonpn1city%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参数。
# 拉勾网职位招聘信息爬取与数据分析
import requests# 模拟浏览器头部信息
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: https://www.lagou.com/jobs/list_python?pxdefault,Cookie: index_location_city%E5%85%A8%E5%9B%BD; user_trace_token20250104093938-902c4ff5-f24c-45e5-aec2-3d1473035947; __lg_stoken__a8290517006006e881e7779a471d837c8e507eea47d1d1fa6cc1ad03ccb44cefb814362b5ac691966eb8697d786c6e53e4f6c233c3d4eaa9ba7c50ac63afc8f768fef09ed4ae; JSESSIONIDABAACCCABBFAAGBFE0BC31D870268EB481847F272508F4B; WEBTJ-ID20250104094035-1942ef8a924bd-0dd7463ae6d789-26001851-1049088-1942ef8a9253d2; LGUID20250104093941-930407fa-f7e8-4c42-81fc-756f97aefcb1; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e61735954836; HMACCOUNTD7BB61FCD5F74C1A; sajssdk_2015_cross_new_user1; _gaGA1.2.694435554.1735954836; _gidGA1.2.74502511.1735954836; X_MIDDLE_TOKENbd70439f6dca25617ea4b718273bbf6d; SEARCH_ID6e9a4c0e27e34ae3929ec6c60a10d1f7; X_HTTP_TOKEN1226f88b1a607ea4951559537134b7e1ae0350e7f1; sensorsdata2015session%7B%7D; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e61735955277; LGRID20250104094702-51a5d712-8f33-46b0-a616-3b54c420e4a4; _ga_DDLTLJDLHHGS1.2.1735954837.1.1.1735955277.60.0.0; gate_login_tokenv1####df3b53f43f17d1db42f281952270b469e8255336da4736f3; LG_LOGIN_USER_IDv1####5496aa08cbf5a8587c4797982411a6af15950cd637352b0a; LG_HAS_LOGIN1; _putrcB6E2CB0ECCED9CDE; logintrue; unick%E7%94%B3%E7%99%BB%E5%B3%B0; showExpriedIndex1; showExpriedCompanyHome1; showExpriedMyPublish1; hasDeliver0; privacyPolicyPopuptrue; 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
}# 目标URL以Python职位为例搜索西安地区第一页数据,pn为页码kd为职位关键词
url https://www.lagou.com/wn/jobs?fromSearchtruekdpythonpn1city%E8%A5%BF%E5%AE%89# 发送get请求获取响应
res requests.get(url, headersheaders)
html res.text
print(html)在这段代码中我们精心构建了请求头和请求参数并发起 GET请求若请求顺利便能获得网页数据为后续的数据解析铺就道路。
3.3 网页解析
当我们成功取回网页的 HTML 内容需要合适的工具来解读其中的奥秘。在这里我们使用BeautifulSoup来获取想要的信息。我们已获取到拉勾网职位列表页的 HTML 内容存储在变量 html 中提取职位名称、薪资、公司名称等信息的代码如下
from bs4 import BeautifulSoupjob_list []
# 创建BeautifulSoup对象选用html.parser解析器
soup BeautifulSoup(html, html.parser)# 查找所有职位列表项
job_list_items soup.find_all(div, class_item__10RTO)for item in job_list_items:# 提取职位名称job_title item.find(idopenWinPostion).text.strip()# 提取薪资范围salary item.find(span, class_money__3Lkgq).text.strip()# 提取公司名称company_name item.find(div, class_company-name__2-SjF).text.strip()# 将职位信息写入列表job_list.append({job_title: job_title, salary: salary, company_name: company_name})print(job_list)在这段代码里我们先创建了 BeautifulSoup 对象然后定义了列表用于临时存储职位信息接着利用 find_all 方法依据类名找出所有职位列表项再深入每个列表项通过标签与属性的组合精准抓取职位名称、薪资、公司名称等关键信息将其清晰呈现。 3.4 保存数据
辛苦抓取并解析得到的数据需要妥善保存才能让其价值延续。常见的 CSV、JSON 等格式各有千秋。
CSV 格式以其简洁的表格形式通用性强能被 Excel 等众多软件直接打开编辑方便数据的初步查看与简单分析。Python 内置的 csv 模块便能担此大任。以下是将获取到的拉勾网职位数据保存为 CSV 文件的示例
import csv# CSV文件路径
csv_file_path lagou_jobs.csv# 写入CSV文件
with open(csv_file_path, w, newline, encodingutf-8) as csvfile:fieldnames [job_title, salary, company_name] # 定义列名writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer.writeheader() # 写入表头writer.writerows(job_list) # 写入数据行print(f数据已成功保存至 {csv_file_path})在这段示例中我们首先定义了 CSV 文件路径运用 csv.DictWriter 以字典形式将数据逐行写入 CSV 文件同时写入表头确保数据存储的规范性与完整性方便后续随时调取分析。 最后对代码进行整理优化并增加多页面处理。
# 爬取拉勾网职位招聘信息
import requests
from bs4 import BeautifulSoup
import csvdef get_html(url):# 模拟浏览器头部信息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: https://www.lagou.com/jobs/list_python?pxdefault,Cookie: index_location_city%E5%85%A8%E5%9B%BD; user_trace_token20250104093938-902c4ff5-f24c-45e5-aec2-3d1473035947; __lg_stoken__a8290517006006e881e7779a471d837c8e507eea47d1d1fa6cc1ad03ccb44cefb814362b5ac691966eb8697d786c6e53e4f6c233c3d4eaa9ba7c50ac63afc8f768fef09ed4ae; JSESSIONIDABAACCCABBFAAGBFE0BC31D870268EB481847F272508F4B; WEBTJ-ID20250104094035-1942ef8a924bd-0dd7463ae6d789-26001851-1049088-1942ef8a9253d2; LGUID20250104093941-930407fa-f7e8-4c42-81fc-756f97aefcb1; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e61735954836; HMACCOUNTD7BB61FCD5F74C1A; sajssdk_2015_cross_new_user1; _gaGA1.2.694435554.1735954836; _gidGA1.2.74502511.1735954836; X_MIDDLE_TOKENbd70439f6dca25617ea4b718273bbf6d; SEARCH_ID6e9a4c0e27e34ae3929ec6c60a10d1f7; X_HTTP_TOKEN1226f88b1a607ea4951559537134b7e1ae0350e7f1; sensorsdata2015session%7B%7D; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e61735955277; LGRID20250104094702-51a5d712-8f33-46b0-a616-3b54c420e4a4; _ga_DDLTLJDLHHGS1.2.1735954837.1.1.1735955277.60.0.0; gate_login_tokenv1####df3b53f43f17d1db42f281952270b469e8255336da4736f3; LG_LOGIN_USER_IDv1####5496aa08cbf5a8587c4797982411a6af15950cd637352b0a; LG_HAS_LOGIN1; _putrcB6E2CB0ECCED9CDE; logintrue; unick%E7%94%B3%E7%99%BB%E5%B3%B0; showExpriedIndex1; showExpriedCompanyHome1; showExpriedMyPublish1; hasDeliver0; privacyPolicyPopuptrue; 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}# 发送get请求获取响应res requests.get(url, headersheaders)html res.textif res.status_code 200:print(f请求成功状态码{res.status_code})else:print(f请求失败状态码{res.status_code})return htmldef get_alljobs(html):job_list []# 创建BeautifulSoup对象选用html.parser解析器soup BeautifulSoup(html, html.parser)# 查找所有职位列表项job_list_items soup.find_all(div, class_item__10RTO)for item in job_list_items:# 提取职位名称job_title item.find(idopenWinPostion).text.strip()# 提取薪资范围salary item.find(span, class_money__3Lkgq).text.strip()# 提取公司名称company_name item.find(div, class_company-name__2-SjF).text.strip()# 将职位信息写入列表job_list.append({job_title: job_title, salary: salary, company_name: company_name})return job_listdef save_to_csv(job_list):# CSV文件路径csv_file_path lagou_jobs.csv# 写入CSV文件with open(csv_file_path, w, newline, encodingutf-8) as csvfile:fieldnames [job_title, salary, company_name] # 定义列名writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer.writeheader() # 写入表头writer.writerows(job_list) # 写入数据行return f数据已成功保存至 {csv_file_path}if __name__ __main__:# 目标URL以Python职位为例搜索西安地区第一页数据,pn为页码kd为职位关键词base_url https://www.lagou.com/wn/jobs?fromSearchtruekdpythoncity%E8%A5%BF%E5%AE%89# 配置页码数量num_pages 3# 定义一个空列表存储所有的职位jobs []for i in range(1, num_pages1):url f{base_url}pn{i}html get_html(url)job_list get_alljobs(html)jobs.extend(job_list)save_to_csv(jobs)print(爬取完成数据已保存至 lagou_jobs.csv)总结
本文通过详细步骤展示了如何使用Python爬取拉勾网的职位招聘信息。我们使用了requests、BeautifulSoup、csv等常见库完成拉勾网数据的抓取、解析与存储并且介绍了如何处理反爬虫机制、分页问题以及数据存储。
在享受爬虫技术带来便利的同时务必铭记要遵循网站规则。合理设置爬取频率模拟真实用户行为不恶意冲击服务器尊重网站的 robots.txt 协议不越界访问禁止区域。只有如此才能确保爬虫技术在合法合规的轨道上稳健前行实现数据获取与网站运营的和谐共生。