使用Python Selenium点击按钮爬取JobBank招聘岗位标题及邮箱
爬取逻辑实现方案
一、现有代码问题修正
你当前的代码将岗位标题和详情链接分开存入elements列表,两者没有一一对应,后续无法匹配单个岗位的标题和对应详情页,首先需要调整数据结构,让每个岗位的标题、链接存在同一个字典中。
二、核心实现步骤
- 导入显式等待相关模块控制页面加载节奏,避免元素未加载就操作报错;导入正则模块用于匹配邮箱格式内容
- 遍历所有配对完成的岗位数据,逐个访问详情页链接
- 等待「Show how to apply」按钮可点击后执行点击操作
- 等待申请信息区域展开后,用正则规则匹配提取区域内的邮箱地址
- 增加异常捕获逻辑,处理无公开邮箱、按钮加载失败等特殊场景
三、完整可运行代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import re # 配置驱动路径,注意路径前加r避免转义字符问题 s = Service(r'C:\Program Files (x86)\chromedriver.exe') driver = webdriver.Chrome(service=s) # 全局等待超时时间设为10秒 wait = WebDriverWait(driver, 10) driver.get('https://www.jobbank.gc.ca/jobsearch/jobsearch?sort=D&fsrc=16&fbclid=IwAR2SIG3lbY1S9lO4WilcKw6TxJAJQbFIGYTVE_tOTqYRpb43qM3uYgLWV64') # 修正后的数据结构:每个元素包含对应岗位的标题和详情链接 jobs = [] # 先获取所有岗位条目 job_items = driver.find_elements(By.CLASS_NAME, 'resultJobItem') for item in job_items: # 提取标题 title = item.find_element(By.XPATH, './/*[@class="noctitle"]').text.strip() # 提取对应详情链接 link = item.find_element(By.XPATH, './a').get_attribute('href') jobs.append({ 'title': title, 'link': link, 'email': '未提取到公开邮箱' }) # 邮箱匹配正则规则 email_pattern = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}') # 遍历所有岗位提取邮箱 for job in jobs: try: # 访问详情页 driver.get(job['link']) # 等待申请按钮可点击 apply_btn = wait.until(EC.element_to_be_clickable((By.ID, 'howtoapply'))) apply_btn.click() # 等待申请区域加载完成 apply_area = wait.until(EC.visibility_of_element_located((By.ID, 'howtoapplycontent'))) # 匹配区域内的邮箱 email_match = email_pattern.search(apply_area.text) if email_match: job['email'] = email_match.group() except Exception: # 异常情况保留默认值 continue # 打印最终结果 for job in jobs: print(f"岗位名称:{job['title']},申请邮箱:{job['email']}") # 关闭驱动 driver.quit()
注意事项
- 如果需要爬取多页数据,可以在单页数据爬取完成后模拟点击下一页按钮,重复上述逻辑即可
- 可以适当调整显式等待的超时时间,适配网络较差的场景
- 部分岗位可能仅提供外部申请链接不公开邮箱,会保留默认的未提取标识
内容的提问来源于stack exchange,提问作者n1kushach
相关产品推荐
相关产品推荐

