Cách Xây Dựng Trình Thu Thập Dữ Liệu Công Việc Công Khai We Work Remotely
TL;DR
Bắt đầu một công cụ quét We Work Remotely với nguồn cấp RSS công khai chính thức khi có đủ danh sách công việc gần đây.
Bảo tồn URL công việc gốc và ghi nhận liên kết đến We Work Remotely, như trang nguồn cấp yêu cầu.
Giữ riêng hạn chế vị trí của một danh sách và sự thật rằng vai trò đó là từ xa.
Sử dụng quy trình làm việc chi tiết có giới hạn và được ủy quyền chỉ khi nguồn cấp không cung cấp trường bắt buộc.
Xác thực hồ sơ trước khi phát hành chúng lên bảng việc làm hoặc cung cấp cho một trợ lý AI.
Nstdata Crawl là một API Crawling Web cho dữ liệu sẵn sàng cho LLM có thể xử lý lớp thu thập trang; quy tắc danh tính và đủ điều kiện công việc vẫn là trách nhiệm của ứng dụng của bạn.
Công Cụ Quét We Work Remotely Dùng Để Làm Gì?
Công cụ quét We Work Remotely chuyển đổi các danh sách công việc được phép thành các hồ sơ mà một bảng điều khiển tuyển dụng, đường ống nghiên cứu hoặc trợ lý tìm kiếm việc làm có thể xử lý. Một hồ sơ hữu ích kết nối tiêu đề và hạn chế vị trí với danh sách gốc, thời gian thu thập và nguồn. Tải xuống mô tả mà không có các trường đó gây khó khăn trong việc xác định các vai trò đã hết hạn hoặc giải thích lý do tại sao một trợ lý đã đề xuất một công việc.
Triển khai đơn giản nhất bắt đầu với nguồn cấp đã được công bố của nền tảng. Hướng dẫn We Work Remotely RSS instructions chính thức cung cấp một nguồn cấp chung và các nguồn cấp thể loại, và yêu cầu ghi nhận trở lại nguồn. Đây là một điểm khởi đầu khác biệt rõ rệt so với việc đoán các bộ chọn trên một trang thể loại.
Sử dụng Nstdata Crawl khi quy trình làm việc được ủy quyền của bạn cũng cần các trang chi tiết đã được render hoặc nội dung từ các nguồn được phép khác. Giữ việc tiếp nhận nguồn cấp và làm phong phú trang như là các giai đoạn riêng biệt để một lỗi render không xóa bỏ các hồ sơ nguồn cấp hợp lệ khác.
Bạn Cần Gì Trước Khi Thu Thập Dữ Liệu Việc Làm?
Bạn cần Python, một mục đích được chấp thuận cho dữ liệu, URL nguồn cấp chính thức, một vị trí lưu trữ, và một danh sách rõ ràng các trường bắt buộc. Ví dụ nguồn cấp bên dưới sử dụng thư viện tiêu chuẩn Python và không yêu cầu tài khoản WWR hoặc đăng ký quét bên thứ ba. Xác minh rằng việc phân phối lại của bạn phù hợp với yêu cầu của nguồn trước khi biến nguồn cấp thành một sản phẩm công khai.
Trải nghiệm Nstproxy Crawl - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Field
Meaning
Acceptance rule
source_url
URL chi tiết công việc gốc
Có mặt, HTTPS, host nguồn mong đợi
source_id
GUID hoặc URL nguồn cấp
Ổn định trong nguồn này
title
Tiêu đề nguồn cấp
Không rỗng; bảo tồn cách diễn đạt gốc
published_at
Thời gian phát hành của nhà xuất bản
Giữ giá trị gốc bên cạnh thời gian đã phân tích
observed_at
Thời gian thu thập của bạn
Dấu thời gian UTC được tạo trong quá trình tiếp nhận
region
Hạn chế tuyển dụng được ghi nhận
Giữ giá trị thiếu thay vì đoán
description_html
Mô tả nguồn cấp
Xem xét như nội dung từ nguồn không tin cậy
Đừng suy ra khoảng lương của nhà tuyển dụng, chính sách visa, hoặc đủ điều kiện toàn cầu từ từ “remote.” Một mô tả có thể chứa các hạn chế mà tiêu đề đã bỏ qua. Giữ những trường này có thể null cho đến khi nguồn thực sự cung cấp văn bản hỗ trợ.
Phát Hiện Nguồn Cấp Khác Với Quét Trang Như Thế Nào?
Phát hiện nguồn cấp nhận các mục gần đây từ một tài liệu XML do nhà xuất bản kiểm soát; quét trang đọc HTML hoặc tài liệu đã render của một trang web. Cả hai đều có thể tạo ra các hồ sơ công việc, nhưng phạm vi và chi phí bảo trì của chúng khác nhau. Nguồn cấp có thể là một nguồn phát hiện tiện lợi mà không đại diện cho một kho lưu trữ lịch sử hoàn chỉnh.
Trong quá trình nghiên cứu của bài viết này, nguồn cấp WWR chung đã trả lại các mục RSS với các trường bao gồm title, link, guid, pubDate, và description. Các trường bổ sung đã có mặt trong phản hồi quan sát, nhưng một khách hàng nên chịu đựng sự thiếu vắng của chúng. Một phản hồi nguồn cấp sau có thể chứa số lượng đầu vào khác nhau, vì vậy đừng bao giờ mã hóa cứng số mẫu như một bảo đảm về độ hoàn chỉnh.
Sử dụng xác thực dữ liệu có cấu trúc khi ánh xạ các trường nguồn vào sơ đồ công việc của bạn. Đối với một hệ thống rộng hơn, phân biệt thu thập thị trường việc làm từ phân loại đủ điều kiện. Cái đầu tiên cung cấp bằng chứng. Cái sau diễn giải bằng chứng và nên giữ một lý do có thể theo dõi cho mỗi nhãn được suy ra.
Bạn Xây Dựng Công Cụ Quét Như Thế Nào Bước Từng Bước?
Xây dựng công cụ quét bằng cách lấy nguồn cấp chính thức, chuẩn hóa một tập hợp nhỏ các trường, và lưu hồ sơ với các định danh nguồn của chúng. Các phương pháp sau đây đại diện cho các nhu cầu thu thập khác nhau; chúng là các lựa chọn thay thế hoặc các giai đoạn liên tiếp hơn là ba cách để buộc truy cập vào cùng một trang.
Phương Pháp 1: Sử Dụng RSS cho các danh sách gần đây
Bước 1: Lưu trình đọc nguồn cấp
Lưu sau đây với tên là wwr_feed.py. Trình đọc giới hạn kích thước phản hồi tải xuống, loại bỏ trùng lặp ID, và kiểm tra host đích trước khi chấp nhận một hồ sơ. Nó không giả định rằng tiêu đề có thể được chia tách một cách đáng tin cậy thành các trường công ty và vai trò.
import json
import urllib.request
import xml.etree.ElementTree as ET
from datetime import datetime, timezone
from urllib.parse import urlsplit
url ="https://weworkremotely.com/remote-jobs.rss"request = urllib.request.Request(url, headers={"User-Agent":"JobFeedReader/1.0"})with urllib.request.urlopen(request, timeout=30)as response: payload = response.read(5_000_001)iflen(payload)>5_000_000:raise RuntimeError("Feed exceeds this reader's size limit")root = ET.fromstring(payload)observed = datetime.now(timezone.utc).isoformat()records, seen =[],set()for item in root.findall("./channel/item"): link =(item.findtext("link")or"").strip() parts = urlsplit(link)if parts.scheme !="https"or parts.hostname !="weworkremotely.com":continue identity =(item.findtext("guid")or link).strip() title =(item.findtext("title")or"").strip()ifnot title or identity in seen:continue seen.add(identity) records.append({"source_id": identity,"source_url": link,"title": title,"published_at": item.findtext("pubDate"),"observed_at": observed,"region": item.findtext("region"),"description_html": item.findtext("description")})ifnot records:raise RuntimeError("No accepted feed records; inspect the response")withopen("wwr-jobs.json","w", encoding="utf-8")as output: json.dump(records, output, ensure_ascii=False, indent=2)print("accepted records:",len(records))
Bước 2: Chạy trình đọc
Chạy python wwr_feed.py trong thư mục làm việc của bạn. Trình phân tích cùng đã được thử nghiệm chống lại phản hồi RSS trực tiếp trong quá trình chuẩn bị bài viết này. Một lần chạy thành công tạo ra một mảng JSON và báo cáo một số lượng bản ghi được chấp nhận dương; số lượng chính xác thay đổi khi nhà xuất bản cập nhật nguồn cấp dữ liệu của mình.
Bước 3: Kiểm tra một bản ghi đã được chấp nhận
Mở wwr-jobs.json và so sánh tiêu đề, URL và khu vực của một bản ghi với danh sách gốc của nó. Giữ lại liên kết nguồn gốc nguyên bản ở bất cứ nơi nào bạn hiển thị kết quả. Nếu nguồn cấp dữ liệu không đầy đủ cho mục đích của bạn, hãy ghi lại trường bị thiếu trước khi thêm một giai đoạn thu thập khác.
Phương pháp 2: Thêm chi tiết trang được ủy quyền vào dữ liệu
Bước 1: Chọn trường bị thiếu
Chọn một trường mà nguồn cấp dữ liệu thực sự thiếu, chẳng hạn như loại hình việc làm có cấu trúc. Kiểm tra xem trang có cung cấp thông tin có thể đọc máy Thuộc tính JobPosting hay không trước khi viết một công cụ chọn hình trực quan. Từ vựng lược đồ ghi lại ý nghĩa của các trường; nó không xác lập rằng WWR phát ra tất cả các thuộc tính trên mọi trang.
Bước 2: Kiểm tra một trang chi tiết đã được phê duyệt
Sử dụng Công cụ Phát triển → Phần tử để so sánh nội dung hiển thị của trang với bất kỳ đoạn mã JSON-LD nào. Ghi lại đường dẫn nguồn cho trường và lưu lại văn bản được sử dụng để suy ra nó. Đừng xuất bản một công cụ chọn được sao chép từ hướng dẫn cũ mà không kiểm tra cấu trúc hiện tại.
[Ảnh chụp màn hình: Một trang chi tiết công việc đã được phê duyệt, hiển thị văn bản vùng tuyển dụng và tương ứng với trường DOM hoặc dữ liệu có cấu trúc.]
Bước 3: Lưu trữ việc làm phong phú một cách riêng biệt
Kết nối kết quả chi tiết với bản ghi nguồn cấp dữ liệu qua URL nguồn. Bao gồm enrichment_status, enriched_at, và một tham chiếu bằng chứng ở mức trường. Một việc làm phong phú thất bại nên giữ nguyên bản ghi nguồn cấp dữ liệu hợp lệ và chỉ đánh dấu trường bổ sung không khả dụng.
Phương pháp 3: Thêm Nstdata Crawl vào quy trình thu thập dữ liệu
Bước 1: Lấy cấu hình yêu cầu hiện tại
Mở Nstdata Crawl Playground từ trang sản phẩm Crawl, nhập một URL chi tiết đã được phê duyệt, chọn Markdown cho xử lý văn bản, và kiểm tra yêu cầu được tạo. Cấu hình việc hiển thị chỉ khi nội dung cần thiết yêu cầu JavaScript. Sử dụng giới hạn trang và giới hạn độ sâu để khám phá thay vì tự động duyệt toàn bộ bảng việc làm.
Bước 2: Kết nối với API client
Cài đặt nstdata-ai-crawl và đặt NSTDATA_API_TOKEN trong môi trường địa phương của bạn. Ví dụ được quản lý dưới đây yêu cầu mã thông báo và quyền truy cập của riêng bạn cho APPROVED_PAGE_URL; nó chưa được thực hiện chống lại WWR với thông tin đăng nhập của khách hàng. Các tên SDK được kiểm tra với gói chính thức hiện tại.
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 isnotTrueor result.status !="completed":raise RuntimeError("Page retrieval was not completed successfully")if result.data isNoneor result.data.truncated isTrue:raise RuntimeError("Missing or partial content requires review") text = result.data.get_markdown()ifnot text ornot 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")
Bước 3: Chấp nhận chỉ nội dung có thể sử dụng
Xác nhận nhiệm vụ đã hoàn thành, kiểm tra kết quả trang và so sánh văn bản trả về với danh sách mục tiêu. Từ chối các trang thử thách, mô tả trống và đầu ra bị cắt lại trước khi chuyển nội dung cho một mô hình. Ghi lại ID nhiệm vụ để chẩn đoán mà không ghi lại mã thông báo API.
Nstdata Crawl Giúp Đỡ Với Dữ Liệu Việc Làm Như Thế Nào?
Nstdata Crawl giúp khi một đường ống dữ liệu việc làm đã được phê duyệt cần lấy trang một cách nhất quán và văn bản sẵn sàng cho LLM ngoài nguồn cấp dữ liệu. Nó là một API Duyệt Web cho dữ liệu sẵn sàng cho LLM, nằm giữa một danh sách URL và mã chuẩn hóa của bạn. Khám phá trang và việc duyệt lặp có thể mở rộng một hạt giống được phép trong các ranh giới rõ ràng. Việc hiển thị JavaScript có thể thu thập nội dung thiếu từ HTML ban đầu. Dịch vụ không quyết định liệu một ứng viên có đáp ứng yêu cầu của một vai trò hay không hoặc cấp phép để tái xuất bản mô tả công việc.
Lựa chọn đầu ra: Markdown hỗ trợ tóm tắt có trọng tâm, HTML hỗ trợ phân tích nhận thức nguồn, và các liên kết hỗ trợ khám phá. JSON, PDF, và các tài sản hình ảnh phục vụ cho những nhu cầu xem xét khác nhau; yêu cầu một định dạng không xác thực lược đồ công việc.
Truy cập proxy được quản lý: Tùy chọn proxy tích hợp của Nstdata tránh phải có một máy chủ proxy, cổng, tên người dùng và mật khẩu riêng cho một yêu cầu quản lý tiêu chuẩn. Lưu lượng proxy vẫn có thể ảnh hưởng đến chi phí; xem xét hóa đơn Crawl hiện tại.
Hoạt động có giới hạn: Gửi một công việc nhỏ trước, giữ lại ID và kết quả nhiệm vụ, và chỉ thử lại với các lỗi có thể phục hồi. Ứng dụng của bạn vẫn nắm giữ việc bỏ trùng, hết thời gian và lưu trữ.
Tại Sao Các Nguồn Cấp Dữ Liệu Việc Làm Trở Nên Cũ Kỹ Hoặc Tạo Ra Các Bản Sao?
Các nguồn cấp dữ liệu việc làm trở nên cũ kỹ khi các khách hàng coi một khoảng thời gian khám phá liên tục là một kế toán đầy đủ hoặc hiểu sai các quan sát lặp lại với các bài đăng mới. Một mục nhập nguồn cấp dữ liệu biến mất không chứng minh nhà tuyển dụng đã đóng vai trò này. Giữ lại first_seen, last_seen, và một trạng thái khả dụng riêng biệt để sự không chắc chắn vẫn hiển thị.
Triệu chứng
Nguyên nhân có thể
Sửa chữa
Vai trò giống nhau xuất hiện nhiều lần
Mỗi lần kiểm tra tạo ra một hàng mới
Upsert theo GUID nguồn cấp dữ liệu hoặc URL nguồn gốc tiêu chuẩn
Các khuyến nghị “Toàn cầu” là sai
Trạng thái từ xa được thay thế cho các hạn chế về vị trí
Giữ lại bằng chứng vùng và yêu cầu các quy tắc đủ điều kiện rõ ràng
Không có bản ghi nào sau một phản hồi HTTP thành công
Tài liệu không như mong đợi, nguồn cấp đã thay đổi, hoặc lỗi phân tích
Kiểm tra loại nội dung và phần tử gốc; giữ lại bộ dữ liệu tốt cuối cùng
Tóm tắt bao gồm điều hướng hoặc hướng dẫn
Văn bản nguồn đã được chấp nhận mà không cần xác thực
Giới hạn đầu vào vào mô tả công việc và tách biệt nội dung không đáng tin cậy
Sử dụng Giao diện XML ElementTree cho việc phân tích nguồn cấp đã được chứng minh, nhưng giữ giới hạn kích thước phản hồi và tránh chấp nhận XML do người dùng gửi tùy ý. Xuất chỉ các trường mà trường hợp sử dụng của bạn cần, và áp dụng chính sách giữ lại cho các mô tả đã lưu.
Làm Thế Nào Để Khởi Động Dòng Dữ Liệu Công Việc?
Khởi động dòng với một tập dữ liệu RSS có thuộc tính nhỏ, một hợp đồng trường đã được xác minh, và một chính sách làm mới rõ ràng. So sánh các bản ghi được chấp nhận với nhà xuất bản trước khi thêm sự phong phú, và đo tỷ lệ trùng lặp, tỷ lệ trường bị thiếu, và tuổi bản ghi. Một tải xuống thành công chỉ là khởi đầu của một nguồn cấp công việc đáng tin cậy.
Để thu thập rộng rãi hơn, sử dụng thu thập lô có giới hạn để tách biệt việc khám phá URL khỏi việc xử lý trang chi tiết. Các đầu ra HTML và hình ảnh của Nstdata có thể hỗ trợ việc xem xét các lỗi trích xuất tiếp theo.
Q: Tôi có thể thu thập công việc WWR mà không cần tự động hóa trình duyệt không?
Có. Nguồn cấp RSS công khai chính thức có thể cung cấp các mục công việc gần đây mà không cần trình duyệt không đầu. Kiểm tra yêu cầu về phạm vi và thuộc tính trước khi sử dụng nó trong sản phẩm.
Q: Nguồn cấp RSS có chứa tất cả các công việc lịch sử không?
Nguồn cấp nên được coi là một cửa sổ phát hiện gần đây trừ khi nhà xuất bản ghi chép rõ ràng tính đầy đủ lịch sử. Lưu trữ các quan sát cho phép theo cách dự đoán nếu bạn cần một chuỗi thời gian.
Q: Nstdata Crawl có thể đảm bảo quyền truy cập vào mọi trang công việc không?
Không. Một dịch vụ truy xuất được quản lý vẫn tùy thuộc vào khả năng có sẵn của mục tiêu, các hạn chế truy cập, hành vi hiển thị, và sự ủy quyền của bạn.
Q: Có nên biến các trường lương bị thiếu thành số không?
Không. Tiền bồi thường bị thiếu nên giữ nguyên giá trị null hoặc rõ ràng chưa biết. Số không gợi ý không đúng một giá trị đã biết và làm sai lệch phân tích.
Q: Điều gì chứng minh rằng công cụ thu thập hoạt động?
Một công cụ thu thập hoạt động tạo ra các bản ghi có liên kết nguồn hợp lệ đồng ý với một mẫu được kiểm tra thủ công, giữ nguyên trạng thái làm mới, và báo cáo lỗi mà không ghi đè lên bộ dữ liệu được chấp nhận cuối cùng.
Lena Zhou
Nov. 9th 2026
Thu thập toàn bộ trang web chỉ với một yêu cầu API
Tỷ lệ thành công 99,8% với kết xuất JavaScript
Nhận dữ liệu sạch, sẵn sàng cho LLM ở nhiều định dạng
Chuyển mọi trang web thành Markdown, HTML, JSON, liên kết, PDF và hơn thế nữa mà không cần quản lý hạ tầng thu thập dữ liệu.