Skip to content

Latest commit

 

History

History
174 lines (140 loc) · 6.26 KB

File metadata and controls

174 lines (140 loc) · 6.26 KB

项目进度总结

重要提示:每次对文件进行重要补充或修改时,都同时修改完善 progress.md。

已完成的任务

1. 基础爬虫功能

  • LinkedIn列表页和详情页抓取
  • 数据导出到Excel
  • 14个字段完整提取

2. 数据提取能力

  • 职位基本信息、工作描述、专业要求智能提取
  • 薪资信息提取和解析(支持年薪/月薪/时薪转换)
  • 公司规模提取(多层级搜索策略,带缓存)

3. 反爬虫处理

  • ZenRows API集成
  • 请求重试机制和延迟控制
  • 错误处理和日志

4. 可中断恢复机制(Checkpoint)

  • Checkpoint管理器实现
  • 阶段1(列表页)和阶段2(详情页)断点续传
  • 数据文件分离存储(进度与数据分离)
  • 自动跳过已处理的职位

5. 数据管理

  • 实时去重机制(在抓取过程中实时去重,基于职位名称+公司名称)
  • 跨地点去重逻辑
  • 公司规模缓存机制
  • 多阶段数据保存(原始数据、去重数据、详情数据)

6. 多地点搜索功能

  • 支持491个地点配置(按州/国家-城市顺序组织)
    • 美国:395个地点(覆盖所有50个州+DC,包括主要科技城市)
    • 国际:96个地点(英国40个、加拿大55个、新加坡1个、香港1个)
  • 跨地点去重逻辑
  • Checkpoint支持多地点恢复

7. 搜索效率优化

  • 合并关键词搜索:使用OR逻辑合并所有关键词,减少重复API调用
  • 智能停止机制:连续2页新增0条时自动结束该地点搜索
  • 实时去重,减少存储空间约94%

8. 大规模数据收集优化

  • 扩展LOCATIONS列表到491个地点
    • 美国:395个地点(覆盖所有50个州+DC,包括主要科技城市和扩展城市)
    • 国际:96个地点(英国40个、加拿大55个、新加坡1个、香港1个)
  • 优化配置参数(MAX_PAGES, LIST_LIMIT, DETAIL_LIMIT)
  • .env文件支持,API密钥安全管理
  • 延迟API key验证(允许其他脚本导入config.py)

9. Supabase数据库集成

  • 单表设计,使用唯一约束去重
  • 批量UPSERT、错误处理
  • 可选集成(不影响现有Excel导出功能)

调查和发现

LinkedIn限制

  • LinkedIn对未登录用户/代理访问有严格限制
  • 每个关键词可能只返回10-50条结果
  • 解决方案:多地点搜索、合并关键词搜索

重复率分析

  • 跨地点搜索时重复率极高(约94%)
  • 解决方案:实时去重机制

搜索效率优化

  • 问题:多个关键词轮流搜索造成大量重复API调用
  • 解决方案:合并关键词搜索(使用OR逻辑),将5个关键词合并为1个搜索
  • 效果:API调用减少80%(从5×139=695次减少到139次,扩展到491个地点后为491次)

进行中的任务

12. AI弱相关岗位抓取

  • 创建独立的抓取程序(main_ai_related.py)
  • 创建职位分类模块(job_classifier.py)
  • 创建合并和分类程序(merge_and_classify.py)
  • 创建新增职位详情抓取程序(enrich_new_jobs.py)
  • 创建最终合并和补全程序(merge_and_enrich_final.py)
  • 支持与BunchTest017数据合并去重

13. 合并抓取程序(main_merged.py)

  • 一次运行完成核心岗位和弱相关岗位的抓取
  • 自动合并数据并添加relevance level标记(1=强相关,2=弱相关)
  • 自动添加职位标签和岗位级别字段
  • 支持独立的checkpoint管理(core和ai_related分别管理)
  • 当RUN_ID变化时自动清空旧的checkpoint
  • 输出格式严格按照merged_report_2.xlsx格式

最新更新

10. 详情页抓取进度汇报优化

  • 每100条职位报告一次进度(显示百分比)
  • 每次请求失败在PowerShell中实时报告
  • 连续3次失败后显示警告提示
  • 抓取完成后显示总结信息

11. 地点配置大幅扩展

  • 美国扩展:从139个地点扩展到395个地点
    • 新增29个州(覆盖所有50个州+DC)
    • 扩展现有州的主要城市(特别是科技中心)
    • 覆盖所有主要科技城市和就业中心
  • 国际扩展:新增96个国际地点
    • 英国:40个地点(覆盖英格兰、苏格兰、威尔士、北爱尔兰主要城市)
    • 加拿大:55个地点(覆盖所有主要省份和城市)
    • 新加坡:1个地点
    • 香港:1个地点
  • 总计:491个地点(美国395个 + 国际96个)
  • 去重检查:所有地点已检查,无重复,格式统一

未实现的功能

1. Indeed完整集成

  • Indeed爬虫集成到主程序
  • Indeed checkpoint支持
  • LinkedIn和Indeed统一去重

2. 混合模式

  • 同时抓取LinkedIn和Indeed
  • 跨平台去重
  • 统一数据格式

3. 高级功能

  • 定时任务支持
  • 并发抓取优化
  • 数据统计分析

当前成果

代码文件

  • main.py - 主程序(支持checkpoint,抓取核心AI岗位)
  • main_ai_related.py - AI弱相关岗位抓取程序(独立运行)
  • main_merged.py - 合并抓取程序(一次运行完成核心+弱相关岗位抓取,自动合并输出)
  • scraper_linkedin_checkpoint.py - LinkedIn爬虫(支持checkpoint和合并关键词搜索,详情页进度汇报)
  • scraper_indeed.py - Indeed爬虫(原始版本)
  • checkpoint_manager.py - Checkpoint管理器
  • exporter.py - Excel导出模块
  • config.py - 配置文件(支持合并关键词搜索配置)
  • locations_config.py - 地点配置文件(491个地点,覆盖美国全境和国际主要城市)
  • job_classifier.py - 职位分类模块
  • merge_and_classify.py - 合并和分类程序
  • merge_and_enrich_final.py - 最终合并和补全程序

文档

  • README.md - 项目说明
  • progress.md - 本文档(项目进度总结)

技术栈

  • Python 3
  • requests - HTTP请求
  • BeautifulSoup4 - HTML解析
  • pandas - 数据处理
  • openpyxl - Excel导出
  • ZenRows API - 反爬虫代理
  • python-dotenv - 环境变量管理

已知限制

  1. LinkedIn结果限制

    • 每个关键词可能只返回10-50条结果
    • 通过代理访问时限制更严格
    • 解决方案:多地点搜索、合并关键词搜索
  2. API配额

    • ZenRows API有请求限制
    • 需要合理设置请求延迟
  3. 数据完整性

    • 某些字段可能无法从所有职位中提取(如薪资、公司规模)
    • 这是正常的,取决于职位页面信息完整性