你知道如何使用 Oxylabs E-Commerce Scraper API 吗?这是 OxyLabs 官方最全面的介绍。
快速入门
Scraper API 可帮助您进行繁重的数据检索操作。您可以使用 Scraper API 访问各种公共页面。它能毫不费力地提取网络数据,不会出现任何延迟或错误。
Scraper API 使用 基本 HTTP 身份验证 需要发送用户名和密码。
这是迄今为止开始使用 Scraper API 最快的方法。您将向 https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html
使用 实时 美国的整合方法 地理位置
并检索已 经过解析的
数据。如果想获取页面 HTML 而不是解析后的数据,只需删除 解析
和 解析器类型
参数。不要忘记替换 用户名
和 密码
使用代理用户凭据。
卷曲 --用户 "用户名:密码" 'https://realtime.oxylabs.io/v1/queries' -H "内容类型:应用程序/json" -d '{"源":"universal_ecommerce", "url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "geo-location":"United States", "parser_type":"ecommerce_product", "parse": true}'
如果您有任何本文件未涉及的问题,请联系您的客户经理或我们的支持人员,地址是 [email protected].
整合方法
Scraper API 支持三种集成方法,它们都有各自独特的优势:
- 推拉式.使用这种方法,现在需要与我们的端点保持活动连接,以检索数据。在发出请求时,我们的系统能够在任务完成后自动 ping 用户服务器(见回调)。这种方法可以节省计算资源,而且易于扩展。
- 实时.该方法要求用户与我们的端点保持活动连接,以便在任务完成时成功获取结果。这种方法可以在一个服务中实现,而推拉法则需要两个步骤。
- 超级用户接口.这种方法与实时方法非常相似,但用户可以使用 HTML Cralwer 作为代理,而不是向我们的端点发布数据。要检索数据,用户必须设置一个代理端点,并向所需的 URL 发送 GET 请求。必须使用标头添加其他参数。
我们推荐的数据提取方法是 推拉式.
推拉式
这是最简单、最可靠、最值得推荐的数据传输方法。在推拉式方案中,您向我们发送查询,我们向您返回工作 本我
工作完成后,您可以使用 本我
中检索内容 /结果
端点。您可以自己检查作业完成状态,也可以设置一个能接受 POST 查询的简单监听器。这样,一旦作业准备就绪,我们就会给你发送一条回调消息。在本例中,结果将自动 上传到您的 S3 存储桶 名为 您的邮筒名称
.
单一查询
以下端点将处理对一个关键字或 URL 的单次查询。API 将返回一条确认信息,其中包含任务信息,包括任务 本我
.您可以使用它来检查任务完成状态 本我
或者,您也可以要求我们在扫描任务完成后 ping 您的回调端点,方法是添加 回调URL
在查询中。
邮寄 https://data.oxylabs.io/v1/queries
您需要在 JSON 主体中将查询参数作为数据发布。
curl --user user:pass1\
'https://data.oxylabs.io/v1/queries' \
-H "内容类型:应用程序/json" \
-d '{"源":"universal_ecommerce", "url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html","callback_url":"https://your.callback.url","storage_type":"s3","storage_url":"your_bucket_name"}'
舶来品 要求
从 打印 舶来品 打印
# 结构有效载荷。
载荷 = {
来源: universal_ecommerce,
'url'(网址: 'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
回调URL: 'https://your.callback.url',
存储类型: 's3',
存储URL: your_bucket_name
}
# 获取响应。
回应 = 要求.要求(
POST,
'https://data.oxylabs.io/v1/queries',
授权=(用户, pass1),
json=载荷,
)
# 向 stdout 打印经过修饰的响应。
打印(回应.json())
<?php
$params = 矩阵(
来源 => universal_ecommerce,
'url'(网址 => 'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
回调URL => 'https://your.callback.url',
存储类型 => 's3',
存储URL => your_bucket_name
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v1/queries");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_postfields, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$headers = 矩阵();
$headers[] = "内容类型:应用程序/json";
curl_setopt($ch, curlopt_httpheader, $headers);
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
目前不支持 HTTP 方法
API 将以 JSON 格式响应查询信息,并将其打印在响应体中,与此类似:
{
"回调URL": "https://your.callback.url",
"client_id": 5,
"创建时间": "2019-10-01 00:00:01",
"域": "com",
"地理位置": 无效,
"id": "12345678900987654321",
"限制": 10,
"locale": 无效,
"页面": 1,
"解析": 错误,
"渲染": 无效,
"url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"源": "universal_ecommerce",
"起始页": 1,
"状态": "待定",
"存储类型": "s3",
"storage_url": "YOUR_BUCKET_NAME/12345678900987654321.json",
"子域": "www",
"更新时间": "2019-10-01 00:00:01",
"user_agent_type": "桌面",
"_链接": [
{
"rel": "自我",
"href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
"方法": "GET"
},
{
"rel": "结果",
"href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
"方法": "GET"
}
]
}
检查工作状态
如果您的查询有 回调URL
我们会在扫描任务完成后向您发送一条包含内容链接的信息。但是,如果没有 回调URL
在查询中,您需要自己检查任务状态。为此,您需要使用 href
根据 rel
:自我
在您向我们的 API 提交查询后收到的响应信息中。它应该与下面的内容相似: http://data.oxylabs.io/v1/queries/12345678900987654321
.
GET https://data.oxylabs.io/v1/queries/{id}
查询此链接将返回工作信息,包括其 地位
.有三种可能 地位
价值观
未决 |
任务仍在队列中,尚未完成。 |
完成的 |
任务完成后,您可以通过在 href 根据 rel :成果 : http://data.oxylabs.io/v1/queries/12345678900987654321/results |
有问题 |
任务出现了问题,我们无法完成任务,很可能是由于目标网站方面的服务器出错。 |
curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321'
舶来品 要求
从 打印 舶来品 打印
# 从统计终点获取响应。
回应 = 要求.要求(
方法=GET,
网址='http://data.oxylabs.io/v1/queries/12345678900987654321',
授权=(用户, pass1),
)
# 向 stdout 打印经过修饰的 JSON 响应。
打印(回应.json())
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://data.oxylabs.io/v1/queries/12345678900987654321");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_customrequest, "GET");
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
目前不支持 HTTP 方法
API 将在响应体中打印 JSON 格式的查询信息。请注意,任务 地位
改为 完成的
.现在您可以通过查询 http://data.oxylabs.io/v1/queries/12345678900987654321/results
.
您还可以看到任务已被 updated_at
2019-10-01 00:00:15
- 查询需要 14 秒才能完成。
{
"client_id": 5,
"创建时间": "2019-10-01 00:00:01",
"域": "com",
"地理位置": 无效,
"id": "12345678900987654321",
"限制": 10,
"locale": 无效,
"页面": 1,
"解析": 错误,
"渲染": 无效,
"url": "沙发",
"源": "universal_ecommerce",
"起始页": 1,
"状态": "完成",
"子域": "www",
"更新时间": "2019-10-01 00:00:15",
"user_agent_type": "桌面",
"_链接": [
{
"rel": "自我",
"href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
"方法": "GET"
},
{
"rel": "结果",
"href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
"方法": "GET"
}
]
}
检索工作内容
通过检查作业的状态,一旦知道可以检索作业,就可以使用 href
根据 rel
:成果
在我们的初始响应中。它看起来应该与此类似: http://data.oxylabs.io/v1/queries/12345678900987654321/results
.
GET https://data.oxylabs.io/v1/queries/{id}/results
通过设置回调服务,可以自动检索结果,而无需定期检查作业状态。用户需要指定运行回调服务的服务器的 IP 或域。当我们的系统完成一项作业时,它将向所提供的 IP 或域发送一条信息,回调服务将下载结果,如回调实现示例中所述。
curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321/results'
舶来品 要求
从 打印 舶来品 打印
# 从统计终点获取响应。
回应 = 要求.要求(
方法=GET,
网址='http://data.oxylabs.io/v1/queries/12345678900987654321/results',
授权=(用户, pass1),
)
# 将经过修饰的 JSON 响应打印到 stdout。
打印(回应.json())
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://data.oxylabs.io/v1/queries/12345678900987654321/results");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_customrequest, "GET");
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
目前不支持 HTTP 方法
API 将返回工作内容:
{
"结果": [
{
"内容": "
内容
",
"创建时间": "2019-10-01 00:00:01",
"更新时间": "2019-10-01 00:00:15",
"页": 1,
"url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"job_id": "12345678900987654321",
"状态代码": 200
}
]
}
回调
回调是一个 职位
我们会向您的机器发送请求,告知数据提取任务已完成,并提供下载刮擦内容的 URL。这意味着您不再需要 检查工作状态 手动操作。一旦数据到齐,我们会通知您,您现在需要做的就是 取回.
# 请查看 Python 和 PHP 代码示例。
# 这是一个简单的 Sanic 网络服务器,通过 localhost:8080 监听回调路由。
# 它会将作业结果打印到 stdout。
舶来品 要求
从 打印 舶来品 打印
从 卫生 舶来品 萨尼奇, 回应
AUTH_TUPLE = (用户, pass1)
应用 = 萨尼奇()
# 定义 /job_listener 端点,接受 POST 请求。
@app.route(/job_listener, 方法=[POST])
异步 捍卫 工作监听器(要求):
尝试:
重新 = 要求.json
链接 = 重新.获取(链接, [])
对于 链接 于 链接:
如果 链接[rel] == 结果:
# Sanic 是异步的,但请求是同步的,以充分发挥
# 利用 Sanic 的优势,使用 aiohttp。
res_response = 要求.要求(
方法=GET,
网址=链接[href],
授权=AUTH_TUPLE,
)
打印(res_response.json())
断裂
除开 例外情况 作为 e:
打印("监听器异常:{}".格式(e))
返回 回应.json(地位=200, 机构={状态: 好的})
如果 姓名____ == '__main__'(__main__:
应用.运行(东道主='0.0.0.0', 港=8080)
<?php
$stdout = fopen(php://stdout, 'w');
如果 (isset($_POST)) {
$result = 数组合并($_POST, (矩阵) json_decode(file_get_contents(php://input)));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v1/queries/".$result[id].结果);
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_customrequest, "GET");
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$result = curl_exec($ch);
fwrite($stdout, $result);
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
}
?>
目前不支持 HTTP 方法
回调输出示例
{
"创建时间":"2019-10-01 00:00:01",
"更新时间":"2019-10-01 00:00:15",
"locale":无效,
"client_id":163,
"user_agent_type":"桌面",
"源":"universal_ecommerce",
"页面":1,
"子域":"www",
"状态":"完成",
"起始页":1,
"解析":0,
"渲染":无效,
"优先权":0,
"ttl":0,
"起源":"api",
"坚持":真,
"id":"12345678900987654321",
"回调URL":"http://your.callback.url/",
"url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"域":"de",
"限制":10,
"地理位置":无效,
{...}
"_链接":[
{
"href":"https://data.oxylabs.io/v1/queries/12345678900987654321",
"方法":"GET",
"rel":"自我"
},
{
"href":"https://data.oxylabs.io/v1/queries/12345678900987654321/results",
"方法":"GET",
"rel":"结果"
}
],
}
批量查询
Scraper API 还接受每次查询多个关键词,每批最多可提取 1,000 个关键词。以下端点将向提取队列提交多个关键词。
邮寄 https://data.oxylabs.io/v1/queries/batch
您需要在 JSON 主体中将查询参数作为数据发布。
系统会将每个关键字作为一个单独请求来处理。如果您提供了回调 URL,则每个关键字都会收到一个单独的调用。否则,我们的初始响应将包含任务 本我
的所有关键字。例如,如果您发送了 50 个关键字,我们将返回 50 个唯一的职位。 本我
s.
重要! 询问
是唯一一个可以有多个值的参数。所有其他参数对于该批次查询都是一样的。
curl --user user:pass1 'https://data.oxylabs.io/v1/queries/batch' -H 内容类型:应用程序/json \
-d @keywords.json
舶来品 要求
舶来品 json
从 打印 舶来品 打印
# 从文件中获取有效载荷。
与 开(关键词.json, 'r') 作为 f:
载荷 = json.载荷(f.阅读())
回应 = 要求.要求(
POST,
'https://data.oxylabs.io/v1/queries/batch',
授权=(用户, pass1),
json=载荷,
)
# 打印经过修饰的回复。
打印(回应.json())
<?php
$paramsFile = file_get_contents(真实路径("keywords.json"));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v1/queries/batch");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_postfields, $paramsFile);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$headers = 矩阵();
$headers[] = "内容类型:应用程序/json";
curl_setopt($ch, curlopt_httpheader, $headers);
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
目前不支持 HTTP 方法
keywords.json
内容:
{
"url":[
"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html",
"https://books.toscrape.com/catalogue/soumission_998/index.html"
],
"源": "universal_ecommerce",
"回调URL": "https://your.callback.url"
}
API 将以 JSON 格式响应查询信息,并将其打印在响应体中,与此类似:
{
"查询": [
{
"回调URL": "https://your.callback.url",
{...}
"创建时间": "2019-10-01 00:00:01",
"域": "com",
"id": "12345678900987654321",
{...}
"url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"源": "universal_ecommerce",
{...}
"rel": "结果",
"href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
"方法": "GET"
}
]
},
{
"回调URL": "https://your.callback.url",
{...}
"创建时间": "2019-10-01 00:00:01",
"域": "com",
"id": "12345678901234567890",
{...}
"url": "https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html",
"源": "universal_ecommerce",
{...}
"rel": "结果",
"href": "http://data.oxylabs.io/v1/queries/12345678901234567890/results",
"方法": "GET"
}
]
},
{
"回调URL": "https://your.callback.url",
{...}
"创建时间": "2019-10-01 00:00:01",
"域": "com",
"id": "01234567899876543210",
{...}
"url": "https://books.toscrape.com/catalogue/soumission_998/index.html",
"源": "universal_ecommerce",
{...}
"rel": "结果",
"href": "http://data.oxylabs.io/v1/queries/01234567899876543210/results",
"方法": "GET"
}
]
}
]
}
获取通知程序 IP 地址列表
您可能希望将向您发送回调信息的 IP 列入白名单,或为其他目的获取这些 IP 的列表。这可以通过 获取
在这个端点上: https://data.oxylabs.io/v1/info/callbacker_ips
.
curl --user user:pass1 'https://data.oxylabs.io/v1/info/callbacker_ips'
舶来品 要求
从 打印 舶来品 打印
# 从回调 IP 端点获取响应。
回应 = 要求.要求(
方法=GET,
网址='https://data.oxylabs.io/v1/info/callbacker_ips',
授权=(用户, pass1),
)
# 将经过修饰的 JSON 响应打印到 stdout。
打印(回应.json())
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v1/info/callbacker_ips");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_customrequest, "GET");
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
目前不支持 HTTP 方法
API 将返回向您的系统发出回调请求的 IP 列表:
{
"ips": [
"x.x.x.x",
"y.y.y.y"
]
}
上传到存储器
默认情况下,Ecommerce Spraper API 的作业结果存储在我们的数据库中。这意味着您需要查询我们的结果端点并自行检索内容。自定义存储功能允许您将结果存储在自己的云存储中。该功能的优点是您无需额外请求即可获取结果,所有内容都会直接存储到您的存储桶中。
目前,我们只支持 Amazon S3。如果您想使用其他类型的存储,请联系您的客户经理讨论时间安排。
要将作业结果上传到 Amazon S3 存储桶,需要设置特殊权限。为此,请转到 https://s3.console.aws.amazon.com/ > S3 > 存储 > 桶名称(如果没有,请新建) > 权限 > 桶策略
您可以在此找到水桶政策 JSON 或右侧的代码示例区。不要忘记更改 您的邮筒名称
.该策略允许我们写入您的邮筒、为您上传文件并了解邮筒的位置。
要使用此功能,您需要在请求中指定两个附加参数。了解更多信息 这里.
上传路径如下 YOUR_BUCKET_NAME/job_ID.json
.您可以在提交请求后从我们收到的回复正文中找到工作编号。在 本例 工作编号为 12345678900987654321
.
{
"版本": "2012-10-17",
"Id": "Policy1577442634787",
"声明": [
{
"希德": "Stmt1577442633719",
"效果": "允许",
"校长": {
"AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
},
"行动": "s3:GetBucketLocation,
"资源": "arn:aws:s3:::YOUR_BUCKET_NAME"
},
{
"希德": "Stmt1577442633719",
"效果": "允许",
"校长": {
"AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
},
"行动": [
"s3:PutObject,
"s3:PutObjectAcl"
],
"资源": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
}
]
}
实时
数据提交与推拉式方法相同,但使用实时方法时,我们将在连接打开时返回内容。您向我们发送一个查询,连接保持打开,我们检索内容并将其发送给您。处理此问题的端点如下:
邮寄 https://realtime.oxylabs.io/v1/queries
开放连接的超时限制为 100 秒。因此,在极少数负载较重的情况下,我们可能无法确保将数据发送给您。
您需要在 JSON 主体中将查询参数作为数据发布。详情请参阅示例。
curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "内容类型:应用程序/json" \
-d '{"源":"universal_ecommerce", "url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"}'
舶来品 要求
从 打印 舶来品 打印
# 结构有效载荷。
载荷 = {
来源: universal_ecommerce,
'url'(网址: 'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
}
# 获取响应。
回应 = 要求.要求(
POST,
'https://realtime.oxylabs.io/v1/queries',
授权=(用户, pass1),
json=载荷,
)
# 返回的不是包含任务状态和结果 url 的响应,而是
# JSON 响应结果。
打印(回应.json())
<?php
$params = 矩阵(
来源 => universal_ecommerce,
查询 => 沙发,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_postfields, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$headers = 矩阵();
$headers[] = "内容类型:应用程序/json";
curl_setopt($ch, curlopt_httpheader, $headers);
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
# URL 必须编码以转义 `&` 和 `=` 字符。本示例中不需要。
https://realtime.oxylabs.io/v1/queries?source=universal_ecommerce&url=https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html&access_token=12345abcde
打开连接时将返回的响应体示例:
{
"结果": [
{
"内容": "<html
内容
"
"创建时间": "2019-10-01 00:00:01",
"更新时间": "2019-10-01 00:00:15",
"id": 无效,
"页": 1,
"url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"job_id": "12345678900987654321",
"状态代码": 200
}
]
}
超级用户接口
如果您曾经使用过普通代理进行数据搜刮,那么集成 SuperAPI 传输方法将轻而易举。您只需将我们的入口节点用作代理,使用 Scraper API 凭据进行授权,然后忽略证书即可。在 cURL
这是 -k
或 --不安全
.您的数据将通过开放连接发送给您。
GET realtime.oxylabs.io:60000
超级用户接口只支持少量参数,因为它 仅适用于 直接 数据源 其中提供了完整的 URL。这些参数应作为标头发送。这是一份可接受的参数列表:
X-OxySERPs-User-Agent-Type |
虽然无法指明特定的 User-Agent,但您可以让我们知道您使用的浏览器和平台。支持的用户代理列表如下所示 这里. |
如果您在设置超级用户接口时需要帮助,请通过以下方式与我们联系 [email protected].
curl -k \
-x realtime.oxylabs.io:60000 \
-用户:pass1 \
-H "X-OxySERPs-User-Agent-Type: desktop_chrome" \
"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
舶来品 要求
从 打印 舶来品 打印
# 定义代理口令。不要忘记在此处填写您的真实用户和密码。
代理 = {
http: 'http://user:[email protected]:60000',
https: 'https://user:[email protected]:60000',
}
回应 = 要求.要求(
GET,
'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
授权=(用户, pass1),
核对=假的, # 或接受我们的证书。
代理=代理,
)
# 将结果页打印到 stdout
打印(回应.文本)
# 将返回的 HTML 保存为 result.html 文件
与 开(结果.html, 'w') 作为 f:
f.写道(回应.文本)
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, CURLOPT_PROXY, realtime.oxylabs.io:60000);
curl_setopt($ch, curlopt_proxyuserpwd, "用户" . ":" . "pass1");
curl_setopt($ch, curlopt_ssl_verifypeer, 错误);
curl_setopt($ch, curlopt_ssl_verifyhost, 错误);
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
超级用户接口不支持 HTTP 方法
内容类型
Scraper API 返回 原始HTML以及 结构化 JSON.
下载图片
可以通过 Scraper API 下载图像。如果通过 SuperAPI 下载,只需将输出保存到图片扩展名即可。例如
curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "https://example.com/image.jpg" >> image.jpg
如果您使用 推拉式 或 实时 方法,您需要添加 content_encoding
参数的值为 base64
.收到结果后,您需要解码来自 内容
转换成字节并保存为图像文件。右侧有一个 Python 示例。
数据来源
Scraper API 接受 URL 以及其他参数,如 User-Agent 类型、代理位置等。请参见此方法,我们将其称为 直接下文将对此进行说明。
Scraper API 能够在扫描时渲染 JavaScript。这样,您就能从网页中获取更多数据,并获得屏幕截图。
如果您对文件的任何部分有疑问,请致电我们 [email protected] 或联系您的客户经理。
直接
universal_ecommerce
源的目的是检索互联网上任何 URL 的内容。 职位
-将 JSON 格式的参数发送到以下端点,将把指定的 URL 提交到提取队列。
查询参数
参数 | 说明 | 默认值 |
消息来源 | 数据来源 | universal_ecommerce |
网址 | 通用网页的直接 URL(链接 | – |
用户代理类型 | 设备类型和浏览器。完整列表如下 这里。 | 桌面 |
地理位置 | 用于检索数据的代理地理位置。支持位置的完整列表如下 这里。 | |
地点 | 正如 Accept-Language 标头所期望的那样。 | |
给予 | 启用 JavaScript 渲染。在目标需要 JavaScript 加载内容时使用。仅适用于推拉(又称回调)方法。该参数有两个可用值:html(获取原始输出)和 png(获取 Base64 编码的截图)。 | |
content_encoding | 如果要下载图像,请添加此参数。了解更多信息 这里。 | base64 |
背景 | Base64 编码的 POST 请求正文。它只有在 http_method 设置为 post 时才有用。 | – |
内容 | ||
背景 | 递上自己的饼干 | – |
饼干 | ||
背景 | 指明是否希望扫描程序跟踪重定向(带有目标 URL 的 3xx 响应),以获取重定向链末端 URL 的内容。 | – |
follow_redirects | ||
背景 | 传递自己的标头 | – |
页眉 | ||
背景 | 如果您想通过电子商务通用抓取器向目标 URL 发出 POST 请求,请将其设置为 "发布"。 | 获取 |
http_method | ||
背景 | 如果您想在多个请求中使用同一个代理,可以使用此参数。只需将会话设置为任意字符串,我们就会为该 ID 分配一个代理,并最多保留 10 分钟。之后,如果您使用相同的会话 ID 发出另一个请求,我们就会为该特定会话 ID 分配一个新的代理。 | – |
session_id | ||
背景 | 定义一个自定义 HTTP 响应代码(或其中的几个),我们应根据该代码认为刮擦成功并将内容返回给您。如果您希望我们返回 503 错误页面或在其他一些非标准情况下,这可能会很有用。 | – |
成功状态代码 | ||
回调URL | URL 到您的回调端点。 | – |
解析 | true 将返回结构化数据,只要提交的 URL 指向电子商务产品页面即可。将此参数与解析器类型参数结合使用,可使用我们的自适应解析器。 | 假 |
解析器类型 | 将值设为 ecommerce_product,以访问自适应解析器。 | – |
存储类型 | 存储服务提供商。目前只支持亚马逊 S3:s3。完整的实现可以在 上传到存储器 页。只能通过推拉(回调)方法运行。 | – |
存储URL | 您的 Amazon S3 存储桶名称。仅适用于推挽(回调)方法。 | – |
- 所需参数
在本例中,应用程序接口将以推拉方式检索一个电子商务通用产品页面。所有可用参数都包含在内(尽管在同一请求中并非总是必要或兼容),以便让您了解如何格式化您的请求:
curl --user user:pass1 \
'https://data.oxylabs.io/v1/queries' \
-H "内容类型:应用程序/json" \
-d '{"源":"universal_ecommerce", "url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "user_agent_type":"mobile", "render":"html"、
"上下文":{"key":"headers", "value": ["Accept-Language":"en-US", "Content-Type":"application/octet-stream", "Custom-Header":"自定义标题内容"]},{"key":"cookies","value":[{"key":"NID","值":"1234567890"},{"key":"1P JAR","值":"0987654321"},{"key":"follow_redirects", "value": true}, {"key":"http_method", "value":"get"}, {"key":"内容","值":"base64EncodedPOSTBody"}, {"key":"successful_status_codes", "value": [303, 808, 909]}]}]}'
舶来品 要求
从 打印 舶来品 打印
# 结构有效载荷。
载荷 = {
来源: universal_ecommerce,
'url'(网址: 'https://www.etsy.com/listing/399423455/big-glass-house-planter-handmade-glass?ref=hp_prn&frs=1',
用户代理类型: 桌面,
地理位置: 美国,
解析: 真,
解析器类型: "电子商务产品",
上下文: [
{
钥匙: session_id,
价值: 1234567890abcdef
}
{
钥匙: 标题, 价值:
{
接受语言: en-US,
内容类型: 应用程序/八字节流,
自定义标题: 自定义标题内容
}
},
{
钥匙: 饼干,
价值: [{
钥匙: NID,
价值: '1234567890'
},
{
钥匙: 1P_JAR,
价值: '0987654321'
}
]
},
{
钥匙: follow_redirects,
价值: 真
},
{
钥匙: 成功状态代码,
价值: [303, 808, 909]
},
{
钥匙: http_method,
价值: 获取
}
{
钥匙: 内容
价值: base64EncodedPOSTBody
}
],
回调URL: 'https://your.callback.url',
}
# 获取响应。
回应 = 要求.要求(
POST,
'https://data.oxylabs.io/v1/queries',
授权=(用户, pass1),
json=载荷,
)
# 向 stdout 打印经过修饰的响应。
打印(回应.json())
<?php
$params = [
来源 => universal_ecommerce,
'url'(网址 => 'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
上下文 => [
[
钥匙 => session_id,
价值 => 1234567890abcdef
],
[
钥匙 => 标题,
价值 => [
接受语言 => en-US,
内容类型 => 应用程序/八字节流,
自定义标题 => 自定义标题内容
],
],
[
钥匙 => 饼干,
价值 => [
[钥匙 => NID, 价值 => '1234567890'],
[钥匙 => 1P_JAR, 价值 => '0987654321']
]
],
[
钥匙 => follow_redirects,
价值 => 真实
],
[
钥匙 => 成功状态代码,
价值 => [303, 808, 909]
],
[
钥匙 => http_method,
价值 => 获取
],
[
钥匙 => 内容,
价值 => base64EncodedPOSTBody
]
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v1/queries");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_postfields, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$headers = 矩阵();
$headers[] = "内容类型:应用程序/json";
curl_setopt($ch, curlopt_httpheader, $headers);
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
HTTP 方法目前不支持 Push-Pull
以下是实时模式下的相同示例:
curl --user user:pass1 \
'https://data.oxylabs.io/v1/queries' \
-H "内容类型:应用程序/json" \
-d '{"源":"universal_ecommerce", "url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "user_agent_type":"mobile", "context":{"key":"headers"(标题),"value"(值):["Accept-Language"(接受语言):"en-US","Content-Type":"application/octet-stream","Custom-Header":"自定义标题内容"]},{"key":"cookies","value":[{"key":"NID","值":"1234567890"},{"key":"1P JAR","值":"0987654321"},{"key":"follow_redirects", "value": true}, {"key":"http_method", "value":"get"}, {"key":"内容","值":"base64EncodedPOSTBody"}, {"key":"successful_status_codes", "value": [303, 808, 909]}]}]}'
舶来品 要求
从 打印 舶来品 打印
# 结构有效载荷。
载荷 = {
来源: universal_ecommerce,
'url'(网址: 'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
用户代理类型: 移动,
地理位置: 美国,
上下文: [
{
钥匙: session_id,
价值: 1234567890abcdef
}
{
钥匙: 标题, 价值:
{
接受语言: en-US,
内容类型: 应用程序/八字节流,
自定义标题: 自定义标题内容
}
},
{
钥匙: 饼干,
价值: [{
钥匙: NID,
价值: '1234567890'
},
{
钥匙: 1P_JAR,
价值: '0987654321'
}
]
},
{
钥匙: follow_redirects,
价值: 真
},
{
钥匙: 成功状态代码,
价值: [303, 808, 909]
},
{
钥匙: http_method,
价值: 获取
}
{
钥匙: 内容
价值: base64EncodedPOSTBody
}
],
}
# 获取响应。
回应 = 要求.要求(
POST,
'https://realtime.oxylabs.io/v1/queries',
授权=(用户, pass1),
json=载荷,
)
# 返回的不是包含任务状态和结果 url 的响应,而是
# JSON 响应结果。
打印(回应.json())
<?php
$params = [
来源 => universal_ecommerce,
'url'(网址 => 'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
上下文 => [
[
钥匙 => session_id,
价值 => 1234567890abcdef
],
[
钥匙 => 标题,
价值 => [
接受语言 => en-US,
内容类型 => 应用程序/八字节流,
自定义标题 => 自定义标题内容
],
],
[
钥匙 => 饼干,
价值 => [
[钥匙 => NID, 价值 => '1234567890'],
[钥匙 => 1P_JAR, 价值 => '0987654321']
]
],
[
钥匙 => follow_redirects,
价值 => 真实
],
[
钥匙 => 成功状态代码,
价值 => [303, 808, 909]
],
[
钥匙 => http_method,
价值 => 获取
],
[
钥匙 => 内容,
价值 => base64EncodedPOSTBody
]
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v1/queries");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_postfields, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$headers = 矩阵();
$headers[] = "内容类型:应用程序/json";
curl_setopt($ch, curlopt_httpheader, $headers);
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
# The whole string you submit has to be URL-encoded.
https://realtime.oxylabs.io/v1/queries?source=universal_ecommerce&url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2Ftagged%2Fpython&access_token=12345abcde
并通过超级用户接口(SuperAPI):
# GET 请求可以如下所示:
curl -k \
-x http://realtime.oxylabs.io:60000 \
-用户:pass1 \
"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html" \
-H "X-OxySERPs-Session-Id:1234567890abcdef" \
-H "X-OxySERPs-地理位置:印度" \
-H "接受语言:en-US" \
-H "内容类型:应用程序/八字节流 \
-H "自定义标题:自定义标题内容" \
-H "Cookie:NID=1234567890; 1P_JAR=0987654321" \
-H "X-Status-Code:303, 808, 909"
# POST 请求具有相同的结构,但包含一个指定为 POST 请求的参数:
curl -X POST \
-k \
-x http://realtime.oxylabs.io:60000 \
-用户:pass1 "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html" \
-H "X-OxySERPs-Session-Id:1234567890abcdef" \
-H "X-OxySERPs-地理位置:印度" \
-H "自定义标题:自定义标题内容" \
-H "Cookie:NID=1234567890; 1P_JAR=0987654321" \
-H "X-Status-Code:303, 808, 909"
舶来品 要求
从 打印 舶来品 打印
# 定义代理口令。不要忘记在此处填写您的真实用户和密码。
代理 = {
http: 'http://user:[email protected]:60000',
https: 'https://user:[email protected]:60000',
}
回应 = 要求.要求(
GET,
'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html',
授权=(用户, pass1),
核对=假的, # 或接受我们的证书。
代理=代理,
)
# 将结果页打印到 stdout
打印(回应.文本)
# 将返回的 HTML 保存为 result.html 文件
与 开(结果.html, 'w') 作为 f:
f.写道(回应.文本)
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, CURLOPT_PROXY, realtime.oxylabs.io:60000);
curl_setopt($ch, curlopt_proxyuserpwd, "用户" . ":" . "pass1");
curl_setopt($ch, curlopt_ssl_verifypeer, 错误);
curl_setopt($ch, curlopt_ssl_verifyhost, 错误);
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
超级用户接口不支持 HTTP 方法
参数值
地理位置
支持的地理位置完整列表以 CSV 格式提供 这里.
"阿拉伯联合酋长国,
"阿尔巴尼亚",
"亚美尼亚,
"安哥拉",
"阿根廷",
"澳大利亚",
...
"乌拉圭",
"乌兹别克斯坦",
"委内瑞拉玻利瓦尔共和国,
"越南",
"南非",
"津巴布韦
HTTP_Method
电子商务 Universal Scraper API 支持两种 HTTP(S) 方法: 获取
(默认)和 职位
.
"GET",
"发布"
渲染
E-commerce Universal Scraper API 可渲染 Javascript 并返回渲染的 HTML 文档或 PNG 网页截图。
"html",
"png"
User_Agent_Type
下载完整列表 用户代理类型
JSON 中的值 这里.
[
{
"user_agent_type": "桌面",
"描述": "随机桌面浏览器用户代理"
},
{
"user_agent_type": "desktop_firefox",
"描述": "最新版桌面火狐浏览器的随机用户代理"
},
{
"user_agent_type": "桌面铬色",
"描述": "最新版桌面 Chrome 浏览器的随机用户代理"。
},
{
"user_agent_type": "桌面歌剧",
"描述": "最新版桌面 Opera 的随机用户代理"。
},
{
"user_agent_type": "桌面边缘",
"描述": "最新版桌面 Edge 的随机用户代理"。
},
{
"user_agent_type": "desktop_safari",
"描述": "最新版桌面 Safari 的随机用户代理"。
},
{
"user_agent_type": "移动",
"描述": "随机移动浏览器用户代理"
},
{
"user_agent_type": "mobile_android",
"描述": "最新版安卓浏览器的随机用户代理"
},
{
"user_agent_type": "mobile_ios",
"描述": "最新版 iPhone 浏览器的随机用户代理"。
},
{
"user_agent_type": "平板电脑",
"描述": "随机平板电脑浏览器用户代理"
},
{
"user_agent_type": "tablet_android",
"描述": "最新版安卓平板电脑的随机用户代理"
},
{
"user_agent_type": "tablet_ios",
"描述": "最新版 iPad 平板电脑的随机用户代理"。
}
]
账户状态
使用统计
您可以通过查询以下端点找到您的使用统计数据:
GET https://data.oxylabs.io/v2/stats
默认情况下,API 将返回所有时间的使用统计数据。添加 group_by=month
将返回月度统计数据,而 group_by=day
将返回每日数字。
此查询将返回所有时间的统计数据。您可以通过添加以下任一选项来查询每日和每月的使用量 group_by=day
或 group_by=month
curl --user user:pass1 'https://data.oxylabs.io/v2/stats'
舶来品 要求
从 打印 舶来品 打印
# 从统计终端获取响应。
回应 = 要求.要求(
方法=GET,
网址='https://data.oxylabs.io/v2/stats',
授权=(用户, pass1),
)
# 向 stdout 打印经过修饰的 JSON 响应。
打印(回应.json())
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v2/stats");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_customrequest, "GET");
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
输出示例
{
"数据": {
"来源": [
{
"实时结果计数": "90",
"结果数": "10",
"标题": "universal_ecommerce"
}
]
},
"元": {
"group_by": 无效
}
}
限制
以下端点将提供您的每月承诺信息以及已使用的承诺额度:
GET https://data.oxylabs.io/v2/stats/limits
curl --user user:pass1 'https://data.oxylabs.io/v2/stats/limits'
舶来品 要求
从 打印 舶来品 打印
# 从统计终端获取响应。
回应 = 要求.要求(
方法=GET,
网址='https://data.oxylabs.io/v2/stats/limits',
授权=(用户, pass1),
)
# 向 stdout 打印经过修饰的 JSON 响应。
打印(回应.json())
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://data.oxylabs.io/v2/stats/limits");
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_customrequest, "GET");
curl_setopt($ch, curlopt_userpwd, "用户" . ":" . "pass1");
$result = curl_exec($ch);
回响 $result;
如果 (curl_errno($ch)) {
回响 错误: . curl_error($ch);
}
curl_close ($ch);
?>
输出示例
{
"每月要求承诺": 4500000,
"已用请求": 985000
}
响应代码
代码 | 现状 | 说明 |
---|---|---|
204 |
无内容 | 您正在尝试检索一项尚未完成的任务。 |
400 |
多种错误信息 | 请求结构错误,可能是参数拼写错误或值无效。响应体将显示更具体的错误信息。 |
401 |
未提供授权标头"/"授权标头无效"/"未找到客户端 | 缺少授权标头或登录凭证不正确。 |
403 |
禁止 | 您的帐户无法访问此资源。 |
404 |
未找到 | 您要查找的职位编号已不再可用。 |
429 |
请求太多 | 超出费率限制。请联系您的客户经理以提高限额。 |
500 |
未知错误 | 无法提供服务。 |
524 |
超时 | 无法提供服务。 |
612 |
未定义的内部错误 | 出了点问题,我们未能完成您提交的任务。您可以免费再试一次,因为我们不会向您收取任何费用。 有问题 工作。如果无效,请与我们联系。 |
613 |
重试次数过多后出现故障 | 我们曾尝试清除您提交的作业,但在达到重试限制后放弃了。您可以免费再试一次,因为我们不会向您收取任何费用。 有问题 工作。如果无效,请与我们联系。 |
参考资料
免责声明 这部分内容主要来自商家。如果商家不希望在我的网站上显示,请 联系我们 删除您的内容。
最后更新于 5 月 15, 2022