Ana içeriğe atla

JavaScript Veri Kazıyıcılar: Özelliklere Genel Bakış

JavaScript veri kazıyıcılar, JavaScript dilini kullanarak istediğiniz kadar karmaşık mantığa sahip kendi tam teşekküllü veri kazıyıcılarınızı oluşturma imkanıdır. Aynı zamanda JS veri kazıyıcılarda standart veri kazıyıcıların tüm işlevlerini de kullanabilirsiniz.

Genel Bakış

Özellikler

A-Parser'ın tüm gücünü kullanarak artık istediğiniz kadar karmaşık mantığa sahip kendi veri kazıyıcı/kayıt edici/gönderici yazılımınızı yazabilirsiniz. Kod yazımı için ES6 özelliklerine sahip JavaScript (v8 motoru) kullanılır.

Veri kazıyıcıların kodu son derece yalındır ve mantığı yazmaya odaklanmanıza olanak tanır; çoklu iş parçacığı, ağ, proxy, sonuçlar, günlükler vb. ile çalışma işlemlerini A-Parser üstlenir. Kod, Veri Kazıyıcı Düzenleyici'de yeni bir veri kazıyıcı ekleyerek doğrudan veri kazıyıcı arayüzünde yazılabilir. Ayrıca veri kazıyıcı yazmak için VSCode gibi üçüncü taraf düzenleyiciler de kullanılabilir.

Yerleşik düzenleyici aracılığıyla veri kazıyıcı kodu kaydedilirken otomatik sürüm oluşturma kullanılır.

not

JavaScript veri kazıyıcılar ile çalışma Pro ve Enterprise lisansları için mevcuttur

JS veri kazıyıcı Düzenleyicisine Erişim

A-Parser uzaktan kullanılıyorsa, güvenlik nedeniyle JS veri kazıyıcı Düzenleyicisi varsayılan olarak erişime kapalıdır. Erişime açmak için şunlar gereklidir:

  • Settings -> Global Settings sekmesinden bir şifre belirleyin
  • config/config.txt dosyasına şu satırı ekleyin: allow_javascript_editor: 1
  • A-Parser'ı yeniden başlatın

Kullanım Talimatı

Veri Kazıyıcı Düzenleyici'de yeni bir veri kazıyıcı oluşturun ve veri kazıyıcı adını belirleyin. Varsayılan olarak, kendi veri kazıyıcınızı oluşturmaya hızlıca başlamanızı sağlayacak basit bir örnek yüklenecektir.

not

Kod yazmak için üçüncü taraf bir düzenleyici kullanılıyorsa, düzenlenen veri kazıyıcının dosyasını /parsers/ klasöründe açmanız gerekir. Yüklü programın dosya yapısı.

Kod hazır olduğunda kaydedin ve normal bir veri kazıyıcı gibi kullanın: Görev Düzenleyici'de oluşturulan veri kazıyıcıyı seçin, gerekirse istediğiniz parametreleri, iş parçacığı yapılandırmasını, dosya adını vb. ayarlayabilirsiniz.

Oluşturulan veri kazıyıcı her an düzenlenebilir. Arayüzle ilgili tüm değişiklikler, veri kazıyıcı listesinde veri kazıyıcıyı tekrar seçtikten veya A-Parser'ı yeniden başlattıktan sonra görünür; veri kazıyıcı mantığındaki değişiklikler, veri kazıyıcı ile görevi yeniden başlattığınızda uygulanır.

Her oluşturulan veri kazıyıcı için varsayılan olarak standart bir simge görüntülenir, /parsers/ içindeki veri kazıyıcı klasörüne yerleştirerek png veya ico formatında kendi simgenizi ekleyebilirsiniz:

Genel Çalışma Prensipleri

Varsayılan olarak, daha fazla düzenleme için hazır basit bir veri kazıyıcı örneği oluşturulur.

files/parsers/v2-example/v2-example.ts

import { BaseParser } from 'a-parser-types';

export class JS_v2_example extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '0.0.1',
results: {
flat: [
['title', 'HTML title'],
]
},
max_size: 2 * 1024 * 1024,
parsecodes: {
200: 1,
},
results_format: '$query: $title\\n',
};

static editableConf: typeof BaseParser.editableConf = [];

async parse(set, results) {
this.logger.put("Start scraping query: " + set.query);

let response = await this.request('GET', set.query, {}, {
check_content: ['<\/html>'],
decode: 'auto-html',
});

if (response.success) {
let matches = response.data.match(/<title>(.*?)<\/title>/i);
if (matches)
results.title = matches[1];
}

results.success = response.success;

return results;
}
}

Yapıcı (constructor) her görev için bir kez çağrılır. this.defaultConf.results ve this.defaultConf.results_format alanlarını mutlaka tanımlamanız gerekir, diğer alanlar isteğe bağlıdır ve varsayılan değerleri alacaktır.

this.editableConf dizisi, hangi ayarların kullanıcı tarafından A-Parser arayüzünden değiştirilebileceğini belirler. Aşağıdaki alan türleri kullanılabilir:

  • combobox - açılır seçim menüsü. Ayrıca standart bir veri kazıyıcının ön ayar seçim menüsü de yapılabilir, örneğin:
['Util_AntiGate_preset', ['combobox', 'AntiGate preset']]
  • Çoklu seçim özelliğine sahip combobox. Ek olarak {'multiSelect': 1} parametresini tanımlamanız gerekir:
['proxyCheckers', ['combobox', 'Proxy Checkers', {'multiSelect': 1}, ['*', 'All']]]
  • checkbox - sadece 2 değer (true/false) alabilen parametreler için onay kutusu
  • textfield - metin alanı
  • textarea - çok satırlı girişli metin alanı

parse yöntemi asenkron bir fonksiyondur ve herhangi bir engelleyici işlem için await döndürmelidir (bu, normal bir fonksiyondan temel ve tek farkıdır). Yöntem, işleme giren her sorgu için çağrılır. set (sorgu ve parametrelerini içeren hash) ve results (sonuçlar için boş şablon) mutlaka iletilir. Ayrıca, success bayrağını önceden ayarlayarak doldurulmuş results nesnesini geri döndürmek zorunludur.

Otomatik Sürüm Oluşturma

Sürüm formatı Major.Minor.Revision şeklindedir

this.defaultConf: typeof BaseParser.defaultConf = {
version: '0.1.1',
...
}

Revision değeri (son rakam) her kaydetmede otomatik olarak artar. Diğer değerler (Major, Minor) manuel olarak değiştirilebilir ve ayrıca Revision 0 olarak sıfırlanabilir.

ipucu

Eğer herhangi bir nedenle Revision değerini sadece manuel olarak değiştirmek isterseniz, sürümü çift tırnak "" içine almanız gerekir.

Sorguların Toplu İşlenmesi

Bazı durumlarda kuyruktan aynı anda birkaç sorgu alıp bunları tek seferde işlemek gerekebilir. Bu mod, yerleşik veri kazıyıcılarda, tek bir geçişte aynı anda birkaç anahtar (paket halinde) için veri istendiğinde kullanılır.

JS veri kazıyıcıda aynı işlevselliği uygulamak için this.defaultConf içinde bulkQueries: N değerini tanımlamanız gerekir; burada N, paketteki gerekli sorgu sayısıdır. Bu durumda veri kazıyıcı sorguları N adetlik paketler halinde alacak ve mevcut yinelemenin tüm sorguları set.bulkQueries dizisinde yer alacaktır (tüm standart değişkenler dahil: query.first, query.orig, query.prev vb.). Aşağıda böyle bir dizi örneği verilmiştir:

[
{
"first": "test",
"prev": "",
"lvl": 0,
"num": 0,
"query": "test",
"queryUid": "6eb301",
"orig": "test"
},
{
"first": "kontrol",
"prev": "",
"lvl": 0,
"num": 1,
"query": "kontrol",
"queryUid": "774563",
"orig": "kontrol"
},
{
"first": "third query",
"prev": "",
"lvl": 0,
"num": 2,
"query": "third query",
"queryUid": "2bc8ed",
"orig": "third query"
}
]

Toplu işlemede sonuçlar, her bir öğenin bir results nesnesi olduğu results.bulkResults dizisine doldurulmalıdır. results.bulkResults içindeki öğeler, set.bulkQueries içindeki sırayla aynı olmalıdır.