Push-Pull
了解 Oxylabs 网页爬虫API 的 Push-Pull 集成方法。提交任务后,稍后使用 JSON 格式数据轮询结果端点。
Push-Pull 是我们推荐的集成方式,用于可靠处理大量数据。
访问 Oxylabs GitHub 仓库,查看完整可运行示例: Python 中的 Push-Pull 集成.
Push-Pull 是一种异步集成方式。提交任务后,您将立即收到一个 JSON 包含所有任务详情的响应,其中包括任务参数、ID 以及用于下载结果和检查状态的 URL。任务处理完成后,我们将通过一个 JSON 发送到您服务器的负载,如果您提供了一个 回调 URL。结果可供检索的时间为 至少 24 小时 完成后。
使用 Push-Pull,您可以将结果直接上传到您的 云存储 (Google Cloud Storage, AWS S3, Alibaba Cloud OSS,或其他兼容 S3 的存储)。
您还可以使用以下工具了解 Push-Pull 的工作方式: Postman.
单个任务
端点
此端点只接受单个 查询 或 URL 值。
POST https://data.oxylabs.io/v1/queries输入
请按照下面的示例,在 JSON 负载中提供任务参数。Python 和 PHP 示例包含注释以便说明。
curl --user "USERNAME:PASSWORD" \
'https://data.oxylabs.io/v1/queries' \
-H "Content-Type: application/json" \
-d '{"source": "universal", "url": "https://www.example.com", "geo_location": "United States", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "s3://your.storage.bucket.url"}'import requests
from pprint import pprint
# Structure payload.
payload = {
"source": "universal", # Source you choose e.g. "universal"
"url": "https://www.example.com", # Check the docs of the specific source to see whether you should use "url" or "query"
"geo_location": "United States", # Some sources accept zip codes or coordinates
#"render" : "html", # Uncomment if you want to render JavaScript within the page
#"render" : "png", # Uncomment if you want to take a screenshot of a scraped web page
#"parse" : True, # Check what sources support parsed data
"callback_url": "https://your.callback.url", # Required if you use the callback listener
"storage_type": "s3",
"storage_url": "s3://your.storage.bucket.url"
}
# Get response.
response = requests.request(
'POST',
'https://data.oxylabs.io/v1/queries',
auth=('YOUR_USERNAME', 'YOUR_PASSWORD'), #Your credentials go here
json=payload,
)
# Print prettified response to stdout.
pprint(response.json())输出
API 将返回一个包含任务信息的 JSON,类似如下:
数据字典
下表描述了任务响应中返回的字段。对于您可发送的输入参数,请参阅您所使用来源的文档页面。
created_at
任务创建时间。
字符串
client_id
与发起请求的客户端用户名相关联的数字 ID。
字符串
client_notes
客户端发送任务时提交的备注。
字符串
id
任务的唯一 ID。
字符串
status
任务状态。 pending 表示任务仍在处理中。 done 表示我们已完成任务。 faulted 表示我们在尝试完成任务时遇到错误,并已放弃。
字符串
subdomain
网站的子域名。
字符串
updated_at
任务最后更新时间。对于已完成的任务(status is done 或 faulted),此时间表示任务完成的时间。
字符串
_links
与所提供输入相关的链接列表。
JSON 数组
_links:rel
链接类型。 self URL 包含任务的元数据,而 results URL 包含任务结果。
字符串
_links:href
资源的 URL。
字符串
_links:method
与给定 URL 交互时应使用的 HTTP 方法。
字符串
回调
回调是一个 POST 我们发送到您机器上的请求,用于通知数据提取任务已完成,并提供一个用于下载爬取内容的 URL。这意味着您不需要 手动检查任务状态 。一旦数据到达,我们会通知您,您现在只需要 检索它.
输入
输出
检查任务状态
如果您在提交任务时提供了有效的回调 URL,我们将在任务完成时发送 JSON 负载到指定的回调 URL。该负载将表明任务已完成,状态设为 done.
但是,如果您在提交任务时未使用 回调服务,您可以手动检查任务状态。从 href 字段中的 rel:self 部分获取 URL。该 URL 将类似于以下内容: http://data.oxylabs.io/v1/queries/12345678900987654321。查询此 URL 将返回任务信息,包括其当前 status.
端点
输入
输出
任务完成后,API 会以 JSON 格式返回查询信息。任务状态将变为 done,表示任务已完成。您可以通过查询提供的链接之一来获取内容。此外,响应还将包含任务上次更新时间戳,使您能够跟踪处理时间。
状态值
pending
任务仍在处理中,尚未完成。
done
任务已完成。您可以通过查询以下内容中提供的 URL 来获取结果 href 字段下的 rel:results 部分,例如: http://data.oxylabs.io/v1/queries/12345678900987654321/results.
faulted
任务出现了问题,我们无法完成它。您不会因任何 faulted 任务而收费。
检索任务内容
一旦任务准备好可供获取,您可以使用响应中 rel:results 部分提供的 URL。该 URL 看起来如下: http://data.oxylabs.io/v1/queries/12345678900987654321/results.
端点
您可以使用以下端点获取不同的结果类型:
您还可以获取 多个结果类型 ,并在单个响应中返回,例如:
若要单独获取某一页的原始内容,而不是放在 JSON 对象中,请使用 content 端点,其中 {n} 表示页面编号,起始于 1。相同的 类型 值也适用。
输入
以下是演示如何使用 /results 端点的代码示例:
输出
该表根据 API 请求负载中包含的参数解释默认结果类型。
-
-
-
html
html
-
-
html
html
-
true
xhr
html
true
true
parsed
png
-
-
png
-
true
-
parsed
html
true
-
parsed
png
true
-
png
默认情况下, /results 端点只返回该负载的默认输出。若要接收其他结果类型,请添加 类型 下方显示的查询参数 端点 。每个请求的类型都会作为单独条目返回到 results 数组中。这是 多个结果类型 功能,并且在 Push-Pull 和 Realtime.
以下是 /results 端点的示例响应。除了 results之外,还会返回一个 任务 对象,其中包含与下文所述相同的任务详情 数据字典,此处已缩写。一些来源还会返回 _request, _response 和 session_info 到每个结果中。
结果可以通过设置 回调 回调服务自动获取。为此,在提交任务时指定一个能够接受传入 HTTP(S) 请求的服务器 URL。当我们的系统完成任务时,它将 POST 向提供的 URL 发送一个 JSON 负载,Callback 服务将按 Callback 实现示例中的说明下载结果.
批量查询
Scraper APIs 支持提交多达 5,000 查询 或 URL 个参数值到单个批量请求中。
端点
系统会将每个 查询 或 URL 提交项作为单独任务处理。如果您提供回调 URL,则每个关键词都会收到单独的调用。否则,我们的初始响应将包含任务 idID,适用于所有关键词。例如,如果您发送了 50 个关键词,我们将返回 50 个唯一的任务 idID。
输入
您需要将查询参数作为 JSON 负载发送。以下是提交批量任务的方法:
你可能会注意到,上面的代码示例没有说明 JSON 负载应如何格式化,并指向一个预先准备好的 JSON 文件。下面是 keywords.json 文件,包含多个 查询 参数值:
……这里是一个 keywords.json 批量输入文件,包含多个 URL:
输出
API 将返回一个 JSON 对象,其中包含每个已创建任务的任务信息。响应将类似于以下内容:
获取通知器 IP 地址列表
您可能希望将向您发送回调消息的 IP 加入白名单,或出于其他目的获取这些 IP 的列表。您可以通过以下方式: GET调用此端点:
端点
输入
下面的代码示例展示了如何访问 /callbacker_ips 端点的代码示例:
输出
API 将返回向您的系统发起回调请求的 IP 列表:
任务管家
任务管家是一项可用于安排重复抓取任务的服务。
它扩展了 Push-Pull 集成的功能,最好与 云集成 功能一起使用。
访问此页面,了解如何使用任务管家功能:
最后更新于
这有帮助吗?

