」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 課程 使用 API 和 Web 抓取實現 HR 自動化

課程 使用 API 和 Web 抓取實現 HR 自動化

發佈於2024-11-05
瀏覽:761

Lesson  Working with APIs and Web Scraping for HR Automation

欢迎回到我们的Python从0到英雄系列!到目前为止,我们已经学习了如何操作数据并使用强大的外部库来执行与工资和人力资源系统相关的任务。但是,如果您需要获取实时数据或与外部服务交互怎么办?这就是API网络抓取发挥作用的地方。

在本课中,我们将介绍:

  1. 什么是API以及它们为何有用。
  2. 如何使用 Python 的 requests 库与 REST API 交互。
  3. 如何应用网络抓取技术从网站提取数据。
  4. 实际示例,例如获取工资的实时税率或从网站抓取员工福利数据。

在本课程结束时,您将能够自动执行外部数据检索,使您的 HR 系统更加动态和数据驱动。


1.什么是API?

API(应用程序编程接口)是一组允许不同软件应用程序相互通信的规则。简而言之,它允许您直接从代码与另一个服务或数据库交互。

例如:

    您可以使用 API 获取
  • 实时税率以进行工资计算。
  • 您可以与
  • HR 软件 API 集成,将员工数据直接提取到您的系统中。
  • 或者您可以使用天气 API 来了解何时根据极端天气条件为员工提供特殊福利。
大多数 API 使用名为

REST(表述性状态传输)的标准,该标准允许您发送 HTTP 请求(如 GET 或 POST)来访问或更新数据。


2. 使用Requests库与API交互

Python 的 requests 库让 API 的使用变得简单。您可以通过运行来安装它:


pip 安装请求
pip install requests
发出基本 API 请求

让我们从一个简单的示例开始,了解如何使用

GET 请求从 API 获取数据

导入请求 # 获取公共数据的示例 API url =“https://jsonplaceholder.typicode.com/users” 响应 = requests.get(url) # 检查请求是否成功(状态码200) 如果响应.status_code == 200: data = response.json() # 将响应解析为 JSON 打印(数据) 别的: print(f"检索数据失败。状态码:{response.status_code}")
pip install requests
在此示例中:

    我们使用requests.get()函数从API获取数据。
  • 如果请求成功,数据会解析为JSON,我们就可以处理了。
HR应用示例:获取实时税务数据

假设您想要获取

实时税率以用于薪资目的。许多国家/地区提供税率的公共 API。

在此示例中,我们将模拟从税务 API 获取数据。使用实际 API 时的逻辑是类似的。


导入请求 # 模拟税率 API api_url =“https://api.example.com/tax-rates” 响应 = requests.get(api_url) 如果响应.status_code == 200: 税数据 = 响应.json() 联邦税 = 税数据['联邦税'] 州税 = 税数据['州税'] print(f"联邦税率:{federal_tax}%") print(f"州税率:{state_tax}%") # 使用税率计算员工工资的总税额 工资=5000 总税 = 工资 * (联邦税 州税) / 100 print(f"工资为 ${salary} 的总税金: ${total_tax:.2f}") 别的: print(f"未能检索税率。状态代码:{response.status_code}")
pip install requests
此脚本可以修改为与实际税率 API 配合使用,帮助您使工资系统保持最新的税率。


3. 网页抓取来收集数据

虽然 API 是获取数据的首选方法,但并非所有网站都提供它们。在这些情况下,

网络抓取可用于从网页中提取数据。

Python 的

BeautifulSoup 库以及请求,使网络抓取变得容易。您可以通过运行来安装它:

pip 安装 beautifulsoup4
pip install requests
示例:从网站抓取员工福利数据

想象一下,您想要从公司的人力资源网站上抓取有关

员工福利的数据。这是一个基本示例:

导入请求 从 bs4 导入 BeautifulSoup # 您要抓取的网页的 URL url =“https://example.com/employee-benefits” 响应 = requests.get(url) # 使用BeautifulSoup解析页面内容 soup = BeautifulSoup(response.content, 'html.parser') # 查找并提取您需要的数据(例如福利列表) 福利 = soup.find_all("div", class_="benefit-item") # 循环并打印出好处 为了利益中的利益: 标题 = Benefit.find("h3").get_text() 描述 = Benefit.find("p").get_text() print(f"好处:{title}") print(f"描述:{描述}\n")
pip install requests
在此示例中:

    我们使用requests.get()请求网页内容。
  • BeautifulSoup 对象解析 HTML 内容。
  • 然后,我们使用 find_all() 提取我们感兴趣的特定元素(例如,福利标题和描述)。
此技术对于从网络收集与人力资源相关的数据(例如福利、职位发布或薪资基准)非常有用。


4. 在 HR 应用程序中结合 API 和 Web 抓取

让我们将所有内容放在一起,创建一个迷你应用程序,结合 API 使用和网络抓取来实现真实的 HR 场景:计算

员工的总成本

出色地:

    使用API​​获取实时税率。
  • 抓取网页以获取额外的员工福利费用。
示例:员工总成本计算器

导入请求 从 bs4 导入 BeautifulSoup # 第1步:从API获取税率 def get_tax_rates(): api_url =“https://api.example.com/tax-rates” 响应 = requests.get(api_url) 如果响应.status_code == 200: 税数据 = 响应.json() 联邦税 = 税数据['联邦税'] 州税 = 税数据['州税'] 返回联邦税、州税 别的: print("获取税率时出错。") 返回无,无 # 第 2 步:从网站上删除员工福利成本 def get_benefit_costs(): url =“https://example.com/employee-benefits” 响应 = requests.get(url) 如果响应.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') # 假设页面列出了每月的福利费用 Benefit_costs = soup.find("div", class_="benefit-total").get_text() 返回浮动(benefit_costs.strip(“$”)) 别的: print("获取福利成本时出错。") 返回 0.0 # 第 3 步:计算员工总成本 defcalculate_total_employee_cost(工资): 联邦税、州税 = get_tax_rates() 福利成本 = get_benefit_costs() 如果 Federal_tax 不是 None 并且 state_tax 不是 None: # 总扣税额 总税 = 工资 * (联邦税 州税) / 100 # 总成本=工资福利税 总成本=工资福利成本总税 返回总成本 别的: 返回无 # 用法示例 员工工资 = 5000 总成本 = 计算总员工成本(员工工资) 如果总成本: print(f"员工的总成本:${total_cost:.2f}") 别的: print("无法计算员工成本。")
pip install requests
运作原理:

    get_tax_rates() 函数从 API 检索税率。
  1. get_benefit_costs() 函数抓取网页以获取员工福利成本。
  2. calculate_total_employee_cost() 函数通过结合工资、税收和福利来计算总成本。
这是一个简化的示例,但演示了如何组合来自不同来源(API 和网络抓取)的数据来创建更加动态和有用的 HR 应用程序。


网页抓取的最佳实践

虽然网页抓取功能强大,但仍需要遵循一些重要的最佳实践:

  1. 尊重网站的robots.txt:有些网站不允许抓取,您应该在抓取之前检查其robots.txt文件。
  2. 在请求之间使用适当的间隔:通过使用 time.sleep() 函数在请求之间添加延迟来避免服务器过载。
  3. 避免抓取敏感或受版权保护的数据:抓取数据时始终确保您没有违反任何法律或道德规则。

结论

在本课中,我们探讨了如何使用

API与外部服务交互,以及如何通过网络抓取从网站提取数据。这些技术为将外部数据集成到 Python 应用程序中提供了无限的可能性,尤其是在 HR 环境中。

版本聲明 本文轉載於:https://dev.to/dazevedo/lesson-7-working-with-apis-and-web-scraping-for-hr-automation-lmj?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-28
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-28
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-28
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-28
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-28
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-28
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內容...
    程式設計 發佈於2024-12-28
  • 如何準確地透視具有不同記錄的資料以避免遺失資訊?
    如何準確地透視具有不同記錄的資料以避免遺失資訊?
    有效地透視不同記錄透視查詢在將資料轉換為表格格式、實現輕鬆資料分析方面發揮著至關重要的作用。但是,在處理不同記錄時,資料透視查詢的預設行為可能會出現問題。 問題:忽略不同值考慮下表:------------------------------------------------------ | Id...
    程式設計 發佈於2024-12-27
  • 為什麼 C 和 C++ 忽略函式簽章中的陣列長度?
    為什麼 C 和 C++ 忽略函式簽章中的陣列長度?
    將陣列傳遞給C 和C 中的函數問題:為什麼C和C 編譯器允許在函數簽章中宣告數組長度,例如int dis(char a[1])(當它們不允許時)強制執行? 答案:C 和C 中用於將數組傳遞給函數的語法是歷史上的奇怪現象,它允許將指針傳遞給第一個元素詳細說明:在C 和C 中,數組不是透過函數的引用傳遞...
    程式設計 發佈於2024-12-26
  • 如何刪除 MySQL 中的重音符號以改進自動完成搜尋?
    如何刪除 MySQL 中的重音符號以改進自動完成搜尋?
    在MySQL 中刪除重音符號以實現高效的自動完成搜尋管理大型地名資料庫時,確保準確和高效至關重要資料檢索。使用自動完成功能時,地名中的重音可能會帶來挑戰。為了解決這個問題,一個自然的問題出現了:如何在 MySQL 中刪除重音符號以改善自動完成功能? 解決方案在於為資料庫列使用適當的排序規則設定。透過...
    程式設計 發佈於2024-12-26
  • 如何在MySQL中實作複合外鍵?
    如何在MySQL中實作複合外鍵?
    在 SQL 中實作複合外鍵一個常見的資料庫設計涉及使用複合鍵在表之間建立關係。複合鍵是多個列的組合,唯一標識表中的記錄。在這個場景中,你有兩個表,tutorial和group,你需要將tutorial中的複合唯一鍵連結到group中的欄位。 根據MySQL文檔,MySQL支援外鍵對應到複合鍵。但是,...
    程式設計 發佈於2024-12-26
  • 為什麼我的 JComponent 隱藏在 Java 的背景圖片後面?
    為什麼我的 JComponent 隱藏在 Java 的背景圖片後面?
    調試背景圖像隱藏的JComponent在Java 應用程式中使用JComponent(例如JLabels)時,必須確保正確的行為和可見度。如果遇到組件隱藏在背景圖像後面的問題,請考慮以下方法:1。正確設定組件透明度:確保背景面板是透明的,以允許底層組件透過。使用setOpaque(false)方法來...
    程式設計 發佈於2024-12-26
  • 如何在 PHP 中轉換所有類型的智慧引號?
    如何在 PHP 中轉換所有類型的智慧引號?
    在 PHP 中轉換所有類型的智慧引號智慧引號是用來取代常規直引號(' 和")的印刷標記。它們提供了更精緻和然而,軟體應用程式通常會在不同類型的智能引號之間進行轉換,從而導致不一致。智能引號中的挑戰轉換轉換智慧引號的困難在於用於表示它們的各種編碼和字符,不同的作業系統和軟體程式採用自...
    程式設計 發佈於2024-12-26
  • 循環 JavaScript 陣列有哪些不同的方法?
    循環 JavaScript 陣列有哪些不同的方法?
    使用 JavaScript 迴圈遍歷陣列遍歷陣列的元素是 JavaScript 中常見的任務。有多種方法可供選擇,每種方法都有自己的優點和限制。讓我們探討一下這些選項:陣列1。 for-of 遵循(ES2015 )此循環使用迭代器迭代數組的值:const arr = ["a", ...
    程式設計 發佈於2024-12-26
  • 如何在 Python 中有效地暫停 Selenium WebDriver 執行?
    如何在 Python 中有效地暫停 Selenium WebDriver 執行?
    Selenium WebDriver 中的等待與條件語句問題: 如何在 Python 中暫停 Selenium WebDriver 執行幾毫秒? 答案:雖然time.sleep() 函數可用於暫停執行指定的秒數,在 Selenium WebDriver 自動化中一般不建議使用。 使用 Seleniu...
    程式設計 發佈於2024-12-26

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3