Ana içeriğe atla

Diğer Veri Kazıyıcılara Sorgular

await this.parser.request(parser, preset, overrideParams, query)

await this.parser.request(parser, preset, overrideParams, query)

Başka bir veri kazıyıcıdan (yerleşik veya başka bir JS veri kazıyıcı) sonuçların alınması, argüman olarak şunlar belirtilir:

  • parser - veri kazıyıcı adı (SE::Google, JS::Custom::Example)
  • preset - çağrılan veri kazıyıcının ayar preseti
  • overrideParams - çağrılan veri kazıyıcının ayarlarını geçersiz kılmak için hash
  • query - sorgu

preset parametresi ile belirtilen çağrılan veri kazıyıcının presetini kısmen yoksayar. Özellikle useproxy, proxyChecker, proxybannedcleanup ayarları, await this.parser.request çağrısını yapan veri kazıyıcıdan alınır.

overrideParams içinde çağrılan veri kazıyıcının parametreleri geçersiz kılınabilir, ayrıca şu bayraklar mevcuttur:

overrideParams.resultArraysWithObjects

resultArraysWithObjects: 0 - çağrılan veri kazıyıcının sonuç dizilerinin hangi biçimde döndürüleceğini belirler:

  • eğer etkinse (1) - nesne dizileri döndürülür
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • eğer devre dışıysa (0) - standart değer dizileri döndürülür
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

Örnek:

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;
}
}

Sonuç örneği:

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 - yanıtta data/pages[] bilgisinin iletilip iletilmeyeceğini (1 veya 0) belirler, optimizasyon için kullanılabilir

overrideParams.needResults

needResults: [ ... ] - döndürülmesi gereken sonuçların listesi.

Örnek:

let response = await this.parser.request('SE::Bing', 'default', {
needResults: [
'totalcount'
]
}, set.query)

Sonuç:

{"success":1,"info":{"success":1,"retries":0},"totalcount":"2130000000"}
ipucu
API::Server::RedisAPI::Server::Redis için de benzer şekilde çalışır

overrideParams.skipProxySettingsInheritance

skipProxySettingsInheritance: 0 - bu seçenek, çağrılan veri kazıyıcı için useproxy parametresinin devralınmasını devre dışı bırakmaya olanak tanır

Paket modunu destekleyen veri kazıyıcılara yapılan sorgular

Ayrıca paket modunda çalışan veri kazıyıcılara erişim de desteklenmektedir. Bunun için query kısmında ['key1', 'key2', ...] şeklinde bir sorgu dizisi iletilmelidir.

Çağrılan veri kazıyıcı tarafından işleme sonucu bulkResults dizisinde yer alacaktır, aşağıda böyle bir dizi örneği verilmiştir:

{
"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
}
}

Paket modunda başka bir veri kazıyıcıya erişim örneği

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 // "paket" içindeki sorgu sayısını belirliyoruz
};

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) // set.bulkQueries nesne dizisini [query1, query2, ... query10] biçimindeki bir diziye dönüştürüyoruz[query1, query2, ... query10]
);
if(success) {
// results.bulkResults içindeki sonuçları dolduruyoruz
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;
}
}