跳到正文
DEV Community· Hải Hà Phan Thanh·· 3 小時前AI 評分41

用 Python 整合 RemoteOK、Remotive 等 7 個遠端招聘平台的職位資訊

One remote-jobs feed from RemoteOK, Remotive and five other boards with Python

AI 導讀

文章示範用 Python 合併 Remotive 和 RemoteOK 的職位 feed,並介紹可整合 7 個招聘平台的 Remote Jobs Scraper actor。示例合併結果有 28 個不重複職位;actor 支援按關鍵字、地區、最低年薪和刊登時間篩選,並可透過 onlyNew 只回傳未曾回傳的職位。費用為每 1,000 個職位 $1.50,無需訂閲。

正文

Hải Hà Phan Thanh

If you run a job newsletter, a Slack job bot, or just your own search alert, you end up checking the same remote boards every day. Several of them publish free JSON feeds, so merging two of them takes about 30 lines.

DIY: merge Remotive and RemoteOK

# pip install requests
import requests

H = {"User-Agent": "Mozilla/5.0"}

def remotive(q):
    r = requests.get("https://remotive.com/api/remote-jobs", params={"search": q}, headers=H, timeout=30)
    return [{"source": "remotive", "title": j["title"], "company": j["company_name"],
             "location": j["candidate_required_location"], "url": j["url"]}
            for j in r.json()["jobs"]]

def remoteok(q):
    r = requests.get("https://remoteok.com/api", headers=H, timeout=30)
    jobs = [j for j in r.json()[1:] if q.lower() in (j.get("position", "") + " " + " ".join(j.get("tags", []))).lower()]
    return [{"source": "remoteok", "title": j["position"], "company": j["company"],
             "location": j.get("location") or "Anywhere", "url": j["url"]} for j in jobs]

seen, merged = set(), []
for job in remotive("python") + remoteok("python"):
    key = (job["company"].strip().lower(), job["title"].strip().lower())
    if key not in seen:
        seen.add(key)
        merged.append(job)

print(len(merged), "unique jobs")
for j in merged[:3]:
    print(j["source"], "|", j["title"], "|", j["company"], "|", j["location"])

Output (31/10/2026):

28 unique jobs
remotive | Senior Back-end Developer | Lemon.io | Europe, USA, Canada, Australia, Singapore, Mexico, Saudi Arabia
remotive | Head of Engineering | Lemon.io | Worldwide
remotive | AI Trainer - Video Annotation | iMerit Technology | Worldwide

Things to know before you build on this:

  • Each board has its own fields. Salary is a number on one, free text on another, missing on a third. Locations are strings like "Worldwide", "USA" or "Europe, Canada".
  • RemoteOK returns its whole feed in one call, and its first element is a legal notice, not a job (hence [1:]). Its terms ask you to link back to the job.
  • The same job is often posted on several boards. Deduplicating on company + title catches most repeats.
  • For a daily alert you also need to remember which jobs you already sent.

When you need more boards

I built the Remote Jobs Scraper actor for the full version. It reads 7 boards (RemoteOK, Remotive, Himalayas, We Work Remotely, Arbeitnow, Jobicy, Working Nomads) into one schema and deduplicates across them. It can filter by keywords, excluded keywords, region, minimum yearly salary and posting age. With onlyNew, a scheduled run returns only jobs it has not returned before. Each record has title, company, location, salary range, tags, apply URL, plain-text description and an attribution line for the source board.

Input example:

{
  "keywords": ["python", "data engineer"],
  "excludeKeywords": ["intern"],
  "salaryMin": 60000,
  "postedWithinDays": 7,
  "onlyNew": true
}

Pricing is $1.50 per 1,000 jobs, no subscription. No login, API key or proxy is needed.

When to use which

  • One or two boards, an occasional look: the script above is enough.
  • Seven boards, salary filters, or a daily feed that only shows new jobs: use the actor, or extend the script yourself.

Disclosure: I built and maintain the actor. It reads the boards' public feeds and keeps their attribution.

來源:DEV Community · dev.to