招聘职位聚合
从需要翻页、懒加载或登录才能查看的招聘网站上采集职位。先用 scrape_with_actions 驱动真实浏览器让列表渲染出来,再用 extract_structured 把各家网站千差万别的版式统一映射到同一份 JSON 结构上。
快速解答
用 scrape_with_actions(5 credits)点击“加载更多”、滚动页面或登录,让职位真正渲染出来,再用 extract_structured(3 credits)把每条职位映射到你自己的 JSON 结构——职位名称、地点、薪资、是否远程。每个列表页大约 8 credits,一份结构定义就能覆盖标记各异的多家网站。
面临的问题
招聘网站把职位藏在“加载更多”按钮、无限滚动和登录墙背后,普通的 HTTP 请求只会拿到一个空壳。而且每家网站给字段的命名都不一样,只要对方改版,基于选择器的爬虫就会失效。
解决方案
CrawlForge 的 scrape_with_actions 会驱动一个真实浏览器——点击、输入、滚动、等待——让职位列表在提取前完成渲染,extract_structured 则把各家网站的任意标记映射到你自己定义的同一份 JSON 结构上。
代码示例
// Load a paginated board, then extract each posting as JSON
const board = await mcp.scrape_with_actions({
url: "https://boards.example.com/jobs?team=engineering",
actions: [
{ type: "wait", selector: ".job-card", condition: "visible" },
{ type: "click", selector: "button.load-more", clickCount: 3 },
{ type: "scroll", direction: "down", distance: 4000 },
],
formats: ["json", "markdown"],
});
// One schema, any board layout
const posting = await mcp.extract_structured({
url: "https://boards.example.com/jobs/senior-backend-engineer",
schema: {
type: "object",
properties: {
title: { type: "string" },
location: { type: "string" },
salaryRange: { type: "string" },
remote: { type: "boolean" },
postedAt: { type: "string" },
},
required: ["title"],
},
});
console.log(posting.data);使用的工具
预估费用:每个列表页约 8 credits
常见问题
如何抓取使用无限滚动的招聘网站?
用 scrape_with_actions 驱动真实浏览器:等待职位列表的选择器出现,点击“加载更多”按钮,并在提取前滚动页面。职位会先渲染出来,因此你拿到的是真实内容,而不是一个空壳。
CrawlForge 能抓取登录之后的页面吗?
可以。scrape_with_actions 支持输入和点击动作,还支持 formAutoFill,因此可以提交凭据并抓取随后出现的页面。请只登录你本人拥有或已获授权访问的账号。
如何把标记结构各异的网站职位统一成同一种格式?
定义一份 JSON 结构——职位名称、地点、薪资区间、是否远程、发布日期——并把它传给 extract_structured。它会把每家网站的标记映射到你的结构上;在没有配置 LLM 时,则回退到 CSS 选择器。
聚合一个招聘网站要花多少 credits?
每个列表页大约 8 credits:scrape_with_actions 的浏览器抓取占 5 credits,对每条职位调用一次 extract_structured 各占 3 credits。如果你每天要拉取上百个详情页,请改用 batch_scrape。