Truy vấn đến các công cụ cào dữ liệu khác
await this.parser.request(parser, preset, overrideParams, query)
await this.parser.request(parser, preset, overrideParams, query)
Nhận kết quả từ một công cụ cào dữ liệu khác (tích hợp sẵn hoặc một công cụ cào dữ liệu JS khác), các đối số được chỉ định gồm:
parser- tên công cụ cào dữ liệu (SE::Google, JS::Custom::Example)preset- mẫu thiết lập của công cụ cào dữ liệu được gọioverrideParams- hash với các thiết lập ghi đè của công cụ cào dữ liệu được gọiquery- truy vấn
Bỏ qua một phần mẫu thiết lập của công cụ cào dữ liệu được gọi, vốn được xác định bởi tham số preset. Cụ thể, các thiết lập useproxy, proxyChecker, proxybannedcleanup được lấy từ công cụ cào dữ liệu thực hiện lệnh gọi await this.parser.request.
Trong overrideParams có thể ghi đè các tham số của công cụ cào dữ liệu được gọi, ngoài ra còn có các cờ sau:
overrideParams.resultArraysWithObjects
resultArraysWithObjects: 0 - xác định định dạng trả về của các mảng kết quả từ công cụ cào dữ liệu được gọi:
- nếu bật (1) - sẽ trả về mảng các đối tượng
[{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...] - nếu tắt (0) - sẽ trả về mảng các giá trị tiêu chuẩn
['link1', 'anchor1', 'link2', 'anchor2', ...]
Ví dụ:
import { BaseParser } from 'a-parser-types';
class JS_DocExample extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
results_format: "$links.format('$link\n')",
results: {
arrays: {
links: ['Links', [
['link', 'link']
]]
}
}
}
async parse(set, results) {
let response = await this.parser.request('SE::Google', 'default', {
resultArraysWithObjects: 1,
pagecount: 1
}, set.query)
results.success = response.success;
if(response.success) {
response.serp.forEach(element => {
results.links.push(element.link);
});
}
return results;
}
}
Ví dụ kết quả:
https://www.speedtest.net/
https://www.investopedia.com/terms/t/t-test.asp
https://www.cdc.gov/coronavirus/2019-ncov/testing/diagnostic-testing.html
https://fast.com/
https://www.thinkwithgoogle.com/feature/testmysite/
https://projectstream.google.com/speedtest
https://www.nhs.uk/conditions/coronavirus-covid-19/testing/
https://www.fda.gov/consumers/consumer-updates/coronavirus-disease-2019-testing-basics
https://zoom.us/test
https://www.gov.uk/get-coronavirus-test
https://en.wikipedia.org/wiki/Test_(assessment)
...
overrideParams.needData
needData: 1 - xác định có truyền (1) hay không (0) data/pages[] trong phản hồi, có thể được sử dụng để tối ưu hóa
overrideParams.needResults
needResults: [ ... ] - danh sách các kết quả cần trả về.
Ví dụ:
let response = await this.parser.request('SE::Bing', 'default', {
needResults: [
'totalcount'
]
}, set.query)
Kết quả:
{"success":1,"info":{"success":1,"retries":0},"totalcount":"2130000000"}
Hoạt động tương tự cho
API::Server::Redis
overrideParams.skipProxySettingsInheritance
skipProxySettingsInheritance: 0 - tùy chọn này cho phép tắt tính năng kế thừa tham số useproxy cho công cụ cào dữ liệu được gọi
Truy vấn đến các công cụ cào dữ liệu hỗ trợ chế độ hàng loạt
Cũng hỗ trợ gọi đến các công cụ cào dữ liệu hoạt động ở chế độ hàng loạt. Để thực hiện, trong query cần truyền một mảng các truy vấn có dạng ['key1', 'key2', ...].
Kết quả xử lý bởi công cụ cào dữ liệu được gọi sẽ nằm trong mảng bulkResults, dưới đây là ví dụ về mảng đó:
{
"bulkResults": [
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key1",
"data": "..."
},
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key2",
"data": "..."
},
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key3",
"data": "..."
}
],
"success": 1,
"info": {
"success": 1,
"retries": 1
}
}
Ví dụ gọi công cụ cào dữ liệu khác ở chế độ hàng loạt
import { BaseParser } from 'a-parser-types';
export class JS_Example_BulkQueries extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '1.0.0',
results: {
flat: [
['views', 'Views count per month']
]
},
results_format: "$query: $views\\n",
SE_Yandex_Direct_Frequency_preset: 'default',
bulkQueries: 10 // thiết lập số lượng truy vấn trong một "gói"
};
static editableConf: typeof BaseParser.editableConf = [
['SE_Yandex_Direct_Frequency_preset', ['combobox', 'SE::Yandex::Direct::Frequency preset']]
];
async parse(set, results) {
const { success, bulkResults } = await this.parser.request(
'SE::Yandex::Direct::Frequency',
this.conf.SE_Yandex_Direct_Frequency_preset,
{ useAccounts: 1 },
set.bulkQueries.map((el) => el.query) // chuyển đổi mảng đối tượng set.bulkQueries thành mảng dạng [query1, query2, ... query10]
);
if(success) {
// điền kết quả vào results.bulkResults
for(let query_number = 0; query_number < set.bulkQueries.length; query_number++) {
results.bulkResults[query_number].views = bulkResults[query_number].views;
results.bulkResults[query_number].success = bulkResults[query_number].success;
}
}
return results;
}
}