如何用for循环创建函数,批量爬取多招聘网站职位数量?
当然可以!这正是函数和循环的核心用途——干掉重复代码,实现批量处理
先看重构后的完整代码:
import os from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as ec import re # 配置环境路径 os.environ['PATH'] += "/Users/monicayadav/PycharmProjects/pythonProject4/selenium/venv/bin" def get_job_count(driver, url, target_xpath): """从指定URL爬取职位数量""" # 打开目标页面 driver.get(url) # 等待目标元素加载完成 WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.XPATH, target_xpath))) # 正则匹配数字格式(支持带逗号的千分位) num_pattern = re.compile(r'^([0-9,]+).*$') # 等待元素文本符合正则匹配规则,返回提取到的数字 job_count = WebDriverWait(driver, 10).until( lambda _: (e := driver.find_element(By.XPATH, target_xpath)) and (m := num_pattern.match(e.text)) and m.group(1) ) return job_count if __name__ == "__main__": # 初始化浏览器驱动 driver = webdriver.Firefox() driver.implicitly_wait(10) # 定义需要爬取的网站列表:每个条目包含网站名称、URL、目标元素XPATH job_sites = [ { "name": "Benteler Automotive", "url": "https://career.benteler.jobs/go/All-Jobs/3197201/", "xpath": "(//b)[11]" }, { "name": "Best Buy", "url": "https://jobs.bestbuy.com/bby?id=all_jobs&spa=1&s=req_id_num", "xpath": "//p[contains(@class, 'font-wt-500 ng-binding')]" } ] # 批量处理每个网站 for site in job_sites: count = get_job_count(driver, site["url"], site["xpath"]) print(f"{site['name']} 职位数量:{count}") # 关闭浏览器 driver.quit()
关键优化点说明:
- 封装函数
get_job_count:把两段代码里重复的「打开页面→等待元素→提取数字」逻辑抽成函数,接收浏览器实例、目标网址、职位数量元素的XPATH三个参数,返回提取到的职位数量。新增网站时不用重复写相同逻辑,直接调用函数即可。 - 用列表存储网站配置:把每个网站的名称、URL、XPATH整理成字典放到列表里,方便管理和扩展——以后要加新网站,直接在列表里加一条新字典就行。
- for循环批量遍历:遍历网站列表,逐个调用函数爬取数据,自动完成批量处理。
这样改造后,代码更简洁易维护,也完全贴合你学习函数和for循环的需求。
内容的提问来源于stack exchange,提问作者Monica
相关产品推荐
相关产品推荐

