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

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

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

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]刪除
最新教學 更多>
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-07-23
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-07-23
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-07-23
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-07-23
  • 用戶本地時間格式及時區偏移顯示指南
    用戶本地時間格式及時區偏移顯示指南
    在用戶的語言環境格式中顯示日期/時間,並使用時間偏移在向最終用戶展示日期和時間時,以其localzone and格式顯示它們至關重要。這確保了不同地理位置的清晰度和無縫用戶體驗。以下是使用JavaScript實現此目的的方法。 方法:推薦方法是處理客戶端的Javascript中的日期/時間格式化和...
    程式設計 發佈於2025-07-23
  • Java字符串非空且非null的有效檢查方法
    Java字符串非空且非null的有效檢查方法
    檢查字符串是否不是null而不是空的if (str != null && !str.isEmpty())Option 2: str.length() == 0For Java versions prior to 1.6, str.length() == 0 can be二手: if(str!= n...
    程式設計 發佈於2025-07-23
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-07-23
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-07-23
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探索了替代方法,探索了在Runruntime。 go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) 如果er...
    程式設計 發佈於2025-07-23
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-07-23
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-07-23
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-07-23
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,將常數列添加到Spark DataFrame,該列具有適用於所有行的任意值的Spark DataFrame,可以通過多種方式實現。使用文字值(SPARK 1.3)在嘗試提供直接值時,用於此問題時,旨在為此目的的使用column方法可能會導致錯誤。 df.with...
    程式設計 發佈於2025-07-23
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-07-23
  • 在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8表中將latin1字符轉換為utf8 ,您遇到了一個問題,其中含義的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致電。為了解決此問題,您正在嘗試使用“ mb_convert_encoding”和“ iconv”轉換受...
    程式設計 發佈於2025-07-23

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

Copyright© 2022 湘ICP备2022001581号-3