Nstproxy 现已升级为 Nstdata。了解此次变化。
周一至周五 09:00 - 18:00(UTC+08:00) 公司地址
19H MAXGRAND PLAZA NO.3 TAI YAU STREET SAN PO KONG, KOWLOON HONG KONG ©2026 NST LABS TECH LTD. 保留所有权利。
Lena Zhou Growth & Integration Specialist
如何构建 Working Nomads 职位抓取工具 TL;DR
开始一个 Working Nomads 职位抓取工具,使用从平台自身职位页面链接的 API。
将返回的数组视为观察到的馈送,不假设历史完整性或未记录的分页。
在推导额外标签之前,保留 url、title、company_name、location 和 pub_date。
分别对薪资、技能和招聘区域证据进行规范化,而不依赖原始源字段。
仅对已授权内容使用浏览器渲染或管理爬虫,这些内容是已发布端点不提供的。
Nstdata Crawl 提供一个 Web 爬虫 API,用于 LLM 准备的数据;它并不能替代你的职位验证和新鲜度逻辑。
What Is the Best Starting Point for a Working Nomads Jobs Scraper?
最佳起点是 Working Nomads 自身链接的公共 API,因为发布者提供的结构化响应可以消除不必要的浏览器自动化。Working Nomads 职位页面 将其 API 与其他产品资源一起链接。在本指南准备期间,链接的端点返回了一个包含职位 URL、标题、描述、公司名称、类别、标签、地点和发布日期的 JSON 数组。
该观察结果并不建立一个详尽的目录、服务级别协议或每种商业重用的许可。检查当前平台条款,并在你的意图分发或收集量需要澄清时联系发布者。可见的 API 响应是有用的工程输入,而不是协议的替代品。
为了更广泛的允许职位数据管道,Nstdata Crawl 可以收集批准的详细页面并返回 LLM 准备的内容。在添加该基础设施之前,从最简单的验证源开始。
Why Does Source Selection Matter More Than Selector Syntax?
源选择很重要,因为结构化的发布者馈送、渲染的列表页面和私有应用端点具有不同的稳定性和权限边界。演示内部搜索请求的教程可能在某一时刻有效,但依赖于未记录的实现细节。官方页面的公共 API 链接提供了更直接的第一个选项进行评估。
保持一个源注册表,包含入口 URL、目的、所有者、观察到的字段、允许使用、刷新策略和最后一次成功验证。源的模式变化时重新检查,而不是无声地添加浏览器回退。这使得故障可以解释,并防止管道在没有审查的情况下漂移到不同的访问方法。
如果你正在构建 生产网络数据管道 ,源选择应该是一个配置决策。避免在一个函数中嵌入馈送 URL、隐藏端点和浏览器选择器,该函数会做出自己的未记录选择。
What Do You Need Before Running the Example?
你需要 Python、对发布者链接的端点的访问、对返回数据的批准使用,以及一个输出文件的目录。标准库示例不需要单独的包安装。它故意读取单个响应,而不是虚构分页参数。
API URL 发布者链接的发现源 验证当前职位页面上的链接
company_name发布者提供的公司标签 保留拼写;不要假设全球唯一性
location陈述的位置信息 保留原始文本和派生地区
observed_at收集时间 本地生成一个 UTC 时间戳
决定你是需要研究快照还是实时职位推荐服务。快照可以用明确的日期标签来帮助。推荐产品需要到期政策和避免将过时的列表作为当前机会呈现的方法。
How Does the Collection and Normalization Flow Work? 收集流程获取源响应,验证其形状,规范化支持的字段,并按源身份更新接受的职位。它应保留足够的原始证据以解释转换,而不暴露不必要的数据。
保持有限重试规则 与工作接受分开,这样临时的网络故障就不会成为源字段值。不要用派生字段替代原始源值。例如,即使你添加了 hiring_region_normalized,也要保留 location_raw。将来的解析器可以在不重新获取每一页的情况下修复分类错误。当更改影响下游资格或匹配时,将提取器版本与记录保持在一起。
如何逐步收集 Working Nomads 的职位? 首先通过验证官方响应来收集职位,然后仅添加您的字段合同所需的丰富阶段。这些方法旨在满足不同需求,而不是作为用于无限制批量收集的可互换技术。
方法 1:读取发布者链接的 JSON 提要
第 1 步:保存单响应收集器 将此代码保存为 working_nomads.py。字段名称在准备文章期间被检查。在合同中故意不包含响应计数。
import json
import urllib . request
from datetime import datetime , timezone
from urllib . parse import urlsplit
url = "https://www.workingnomads.com/api/exposed_jobs/"
with urllib . request . urlopen ( url , timeout = 30 ) as response :
payload = response . read ( 5_000_001 )
if len ( payload ) > 5_000_000 :
raise RuntimeError ( "Response exceeds local size limit" )
items = json . loads ( payload )
if not isinstance ( items , list ) :
raise TypeError ( "Expected a list; inspect the current API response" )
observed = datetime . now ( timezone . utc ) . isoformat ( )
records , seen = [ ] , set ( )
for item in items :
if not isinstance ( item , dict ) :
continue
link = str ( item . get ( "url" ) or "" ) . strip ( )
title = str ( item . get ( "title" ) or "" ) . strip ( )
parts = urlsplit ( link )
if parts . scheme != "https" or parts . hostname not in {
"workingnomads.com" , "www.workingnomads.com"
} :
continue
if not title or link in seen :
continue
seen . add ( link )
records . append ( {
"source_url" : link , "title" : title ,
"company_name" : item . get ( "company_name" ) ,
"location_raw" : item . get ( "location" ) ,
"category" : item . get ( "category_name" ) ,
"tags_raw" : item . get ( "tags" ) ,
"published_at" : item . get ( "pub_date" ) ,
"description_html" : item . get ( "description" ) ,
"observed_at" : observed
} )
if not records :
raise RuntimeError ( "No accepted jobs; retain the last good snapshot" )
with open ( "working-nomads-jobs.json" , "w" , encoding = "utf-8" ) as output :
json . dump ( records , output , ensure_ascii = False , indent = 2 )
print ( "accepted jobs:" , len ( records ) )
第 2 步:运行收集器 运行 python working_nomads.py。确认输出文件包含带有原始出版值的源链接记录。解析器是针对当前发布者链接的响应进行测试的,但您的运行可能返回不同数量的职位或不同的架构。
第 3 步:检查当前源与输出 将小样本与可见的列表页面进行比较。明确检查公司标签和地点限制。如果某个字段缺失,存储 null 并记录缺失情况;不要要求模型推断事实仅仅是为了让记录看起来完整。
方法 2:丰富经过批准的详细页面
第 1 步:识别合理的丰富字段 选择一个缺失会改变产品有用性的字段,例如就业类型标签。JobPosting 词汇 可以帮助定义内部架构,但它并不证明目标页面发布了相同的结构。
第 2 步:检查授权页面的加载行为 使用 开发者工具 → 网络 → Fetch/XHR 来查看字段是否单独加载,使用 元素 检查其呈现证据。保持检查为观察性质,除非您的协议允许特定的收集方法。避免从第三方教程复制内部搜索端点作为支持的发布者接口。
![截图:官方 Working Nomads API 链接和一个可见的丰富字段的批准详细页面。]
第 3 步:记录丰富结果 存储源 URL、证据文本、提取时间和状态以获取额外字段。保持缺失字段与请求失败的区别。这可以防止暂时的浏览器问题从成功读取提要中删除信息。
方法 3:添加使用 Nstdata Crawl 的管理收集
第 1 步:配置允许的示例 打开 Crawl Playground,选择一个已批准的页面 URL,并比较 Markdown 与 HTML 输出。当初始文档缺少所需内容时,添加 JavaScript 渲染。在启用递归收集之前,从单个页面开始。
第 2 步:连接文档化的客户端 安装 nstdata-ai-crawl,然后在您的本地环境中设置 NSTDATA_API_TOKEN 和 APPROVED_PAGE_URL。该示例需要您自己的令牌和访问权限;它是一个文档化的配置,而不是证据表明在本文准备过程中进行了经过身份验证的 Working Nomads 提取。
import os
from pathlib import Path
from nstdata_ai_crawl import NstDataClient , ScrapeRequestDto
token = os . environ [ "NSTDATA_API_TOKEN" ]
url = os . environ [ "APPROVED_PAGE_URL" ]
with NstDataClient ( token ) as client :
result = client . submit_scrape_task_sync ( ScrapeRequestDto (
url = url , formats = [ "markdown" ] , onlyMainContent = True , timeout = 60000
) )
if result . success is not True or result . status != "completed" :
raise RuntimeError ( "Page retrieval was not completed successfully" )
if result . data is None or result . data . truncated is True :
raise RuntimeError ( "Missing or partial content requires review" )
text = result . data . get_markdown ( )
if not text or not text . strip ( ) :
raise RuntimeError ( "No usable Markdown returned" )
Path ( "page.md" ) . write_text ( text , encoding = "utf-8" )
print ( "Saved page.md; validate its content before downstream use" )
第 3 步:应用相同的工作接受规则 要求得到完整的页面结果和非空内容,然后验证工作身份和所需字段。已呈现的页面仍然可以是登录消息或过期列表。保持其获取状态与职位记录是否被接受分开。
Nstdata Crawl 在多源职位管道中适合哪里? Nstdata Crawl 适合需要横跨具有不同展示层的源进行页面检索和清理的已批准管道。它是一个为 LLM 准备数据的网络爬虫 API,提供职位架构之前的收集阶段。发现和递归爬行可以遵循页面和深度限制内的允许链接。JavaScript 渲染和输出转换减少了单独维护这些组件的需要。该产品不解决重复雇主,不确定工作授权,也不授予再分配权。
针对不同消费者的格式: 对于基础职位摘要使用 Markdown,针对解析器检查使用 HTML,以及用于发现的链接。JSON、PDF 和视觉文物可以支持其他审核和归档需求。
内置代理选项: 标准托管请求可以继承Nstdata的代理基础设施,无需单独的代理主机、端口、用户名和密码配置。考虑在当前计费模型 下使用代理。
受控收集: 保持小页面上限和批准路径列表,保存任务ID,并在重新提交之前诊断错误。较大的爬取应遵循经过测量的接受率,而不是任意的并发目标。
为什么职位数量或位置会意外变化? 职位数量和位置标签会在发布者更新其数据源、源窗口移动或规范化规则更改时发生变化。在得出劳动力市场发生变化的结论之前,单独跟踪这些可能性。
症状 可能原因 反应 职位数量急剧下降 数据源窗口或访问行为更改 比较响应形状并保留最后接受的快照 出现重复职位 URL变体或重复导入 使用源特定标识和插入更新操作 远程角色被归类为全球性 位置文本被丢弃 保留原始限制并修订分类器 标签变成一长串字符串 输入类型假设更改 验证源类型并故意进行规范化 渲染后描述为空 缺少字段或意外页面 在重试之前检查HTML和页面状态
您应该如何随时间推移维护数据集? 使用稳定的源键、带时间戳的观测和明确的新鲜状态来维护数据集。不要仅仅因为某个角色从一个数据源响应中消失而将其标记为已关闭。如果您的产品需要确认,请定义允许的重新检查政策,并将不确定的记录排除在“当前招聘”建议之外。
从公共端点和小型手动检查样本开始,仅添加必要的丰富信息。当您批准的范围扩大时,使用分页和发现控制 。Nstdata的备用HTML输出可以帮助在内容不匹配影响职位推荐之前进行诊断。
常见问题 问:Working Nomads 是否公开数据端点?
其职位页面目前链接到一个API端点,该端点在研究期间返回了一个JSON数组。在依赖该链接之前,请重新检查源链接、条款和响应形状。
不。观察到的响应并不确立历史完整性或文档化的分页合同。应根据您实际收集的内容描述覆盖范围。
不。单一响应示例使用Python的标准库。浏览器渲染仅在附加批准的页面内容时变得相关。
AI模型不应编造缺失的资格事实。除非您有源证据和可审查的推导,否则请保持该字段未知。
监控已接受的职位、缺失字段、重复ID、响应模式变化、收集错误和记录年龄。这些揭示了一个请求成功指标所隐含的不同故障模式。
Lena Zhou
Nov. 9th 2026
支持 JavaScript 渲染,成功率达 99.8%
将任意网站转换为 Markdown、HTML、JSON、链接、PDF 等格式,无需管理爬取基础设施。 开始免费爬取 →