- Published on
Seek 招聘网站爬虫
- Authors

- Name
- Jack Qin
SeekSpider:一个用于职位爬取的 Scrapy 项目
目录
简介
SeekSpider 是一个使用 Scrapy 构建的强大网络爬虫工具,Scrapy 是一个快速的高级 Python 网络爬取框架。该项目专为从 seek.com.au 提取职位列表而设计,能够高效地浏览职位列表页面、收集重要的职位相关信息,并将其存储以供进一步分析。它配备了处理分页、浏览不同分类以及在请求失败时管理重试逻辑的功能。
功能特性
- 使用 Scrapy 框架实现强大高效的网络爬取
- 自定义日志设置以保持输出整洁
- 分页处理,可遍历多个列表页面
- 自动遍历不同的职位分类类别
- 集成 BeautifulSoup 进行详细的职位描述爬取
- 内置 RetryMiddleware 自定义,优雅处理 HTTP 错误码
快速开始
前置要求
确保你的系统已安装以下软件:
- Python 3.9 或更高版本
- pip(Python 包安装器)
- MySQL 服务器(用于数据库存储)
安装
- 将仓库克隆到本地机器。
git clone https://github.com/your-username/SeekSpider.git
cd SeekSpider
- 在终端中导航到项目目录。安装
requirements.txt中列出的所需 Python 包。你可以使用 pip 安装:
pip install -r requirements.txt
确保 MySQL 已安装并在本地机器或远程服务器上运行,并设置好所需的数据库和表结构。在 settings_local.py 中配置数据库设置以指向你的 MySQL 实例。
配置
数据库配置:
- 创建 MySQL 数据库和具有适当权限的用户。
- 在
settings_local.py或你选择的配置文件中定义数据库连接设置。
参数配置:
- 在
SeekSpider类的params字典中自定义搜索参数以进行目标爬取。
- 在
运行
使用以下命令运行爬虫:
scrapy crawl seek
执行后,爬虫将开始浏览 SEEK 上的职位列表,并使用 pipeline 将每个职位的数据插入数据库。
注意: 我不是在偷懒,但你可以直接运行 main.py :)
Web API 参数说明
爬虫使用 Seek 职位搜索 API,带有多个查询参数,以根据特定需求定制搜索结果。以下是爬虫查询字符串中使用的这些参数的详细说明:
where:指职位搜索的位置。当前配置设置为 "All Perth WA"。seekSelectAllPages:布尔参数,设置为 True 时,表示爬虫考虑所有可用的职位列表页面。classification:Seek 上的每个职位类别都有唯一的分类 ID。值6281指信息与通信技术。hadPremiumListings:表示搜索结果是否包含高级列表。include:在响应中包含搜索引擎优化数据。locale:确定 API 的区域设置。'en-AU' 将区域设置为英语 - 澳大利亚。url_page:当前页码。
注意: Seek 对职位列表有 26 页的限制,这意味着你无法超过 26 页的结果。为了克服这一限制,我们使用子分类将任务分解成更小的部分。
params 通过 urlencode 方法转换为查询字符串,确保它们针对 HTTP 请求进行正确格式化。调整这些参数允许进行广泛的搜索,以收集对不同用户意图有用的数据。
这些参数对于爬虫的功能至关重要,因为它们决定了网络爬取任务的范围和具体性。用户可以根据自己的需求修改这些参数,以收集与其特定搜索条件相关的职位列表数据。
项目组件
Items
SeekspiderItem 类定义为 Scrapy Item。Items 提供了一种收集爬虫爬取数据的方法。该项目收集的字段如下:
| 字段名 | 描述 |
|---|---|
job_id | 职位发布的唯一标识符 |
job_title | 职位名称 |
business_name | 发布职位的企业名称 |
work_type | 工作类型(如全职、兼职) |
job_description | 职位和职责的描述 |
pay_range | 该职位提供的薪资或范围 |
suburb | 职位所在的郊区 |
area | 职位位置的更大区域指定 |
url | 职位列表的直接 URL |
advertiser_id | 职位广告商的唯一标识符 |
job_type | 职位的分类 |
Spider
SeekSpider 项目的核心是 scrapy.Spider 子类,它定义了如何爬取职位列表。它构建必要的 HTTP 请求,解析从 Web 服务器返回的响应,并使用选择器提取数据以填充 SeekspiderItem 对象。
Pipeline
SeekspiderPipeline 负责处理爬虫爬取的 items。一旦 item 被爬虫填充数据,它就会传递给 pipeline,在那里通过 pymysql 建立与 MySQL 数据库的连接,并将数据插入相应的表中。
Settings
我有意降低了速度以避免被封禁。如果你觉得爬虫太慢,请尝试增加 CONCURRENT_REQUESTS 并减少 DOWNLOAD_DELAY。
配置文件
在运行爬虫之前,你需要在项目目录中创建一个 settings_local.py 文件。该文件应包含数据库连接的配置设置。以下是 settings_local.py 文件的模板:
MYSQL_HOST = 'localhost'
MYSQL_PORT = 3306
MYSQL_USER = 'MYSQL_USER'
MYSQL_PASSWORD = 'MYSQL_PASSWORD'
MYSQL_DATABASE = 'Seek'
MYSQL_TABLE = 'Jobs_test'
如果该文件包含敏感信息(如数据库密码),请确保它不被版本控制跟踪。你可以将 settings_local.py 添加到 .gitignore 文件中,以防止它被提交到 git 仓库。
你可以在爬虫的 params 字典中调整爬取参数,如搜索位置、类别和职位类型。确保这些参数与 seek.com.au API 的预期查询参数匹配。
params = {
"where": "All Perth WA",
"classification": 6281,
"locale": "en-AU",
}
数据库架构
确保你的 MySQL 数据库有一个具有正确架构的表来存储数据。以下是基于 SeekspiderItem 中定义的字段的指导性架构:
CREATE TABLE jobs (
job_id VARCHAR(255) PRIMARY KEY,
job_title VARCHAR(255),
business_name VARCHAR(255),
work_type VARCHAR(255),
job_description VARCHAR(255),
pay_range VARCHAR(255),
suburb VARCHAR(255),
area VARCHAR(255),
url VARCHAR(255),
advertiser_id VARCHAR(255),
job_type VARCHAR(255)
);
请根据你的查询模式包含相关索引以获得最佳性能。
贡献
欢迎贡献。Fork 该项目,进行更改,然后提交 pull request。对于重大更改,请先打开一个 issue 讨论你想要更改的内容。
许可证
该项目根据 Apache License 2.0 许可 - 有关详细信息,请参阅 LICENSE 文件。
致谢
本 README 的内容是在生成式 AI 的协助下生成的,确保了理解所需信息的准确性和效率。
(再说一遍,我真的不是懒人,绝对不是)