Ana içeriğe atla

Yöntemlerin Açıklaması (v1)

uyarı

Bu JavaScript API'si eski olarak kabul edilmektedir, API sürüm 2 kullanmanızı öneririz.

Bazı yöntemlerin yield anahtar kelimesinin kullanılmasını gerektirdiğini unutmayın.

yield this.request()

yield this.request(method, url, queryParams, opts)

İstek üzerine HTTP yanıtı alma, argüman olarak şunlar belirtilir:

  • method - istek yöntemi (GET, POST...)
  • url - istek için bağlantı
  • queryParams - get parametrelerini içeren hash veya post isteği gövdesini içeren hash
  • opts - istek seçeneklerini içeren hash

Eğer POST yöntemi kullanılıyorsa, istek gövdesi iki şekilde iletilebilir:

  • Değişken adlarını ve değerlerini doğrudan queryParams içinde listeleyerek. Örneğin:
{
key: set.query,
id: 1234,
type: 'text'
}
  • opts içindeki body değişkeni aracılığıyla. Örneğin:
body: 'key=' + set.query + '&id=1234&type=text'

opts.check_content

check_content: [ koşul1, koşul2, ...] - alınan içeriği kontrol etmek için bir dizi koşul; eğer kontrol başarısız olursa, istek başka bir proxy ile tekrarlanacaktır.

Özellikler:

  • Koşul olarak dizelerin kullanılması (dize eşleşmesine göre arama)
  • Koşul olarak düzenli ifadelerin kullanılması
  • Verilerin ve yanıt başlıklarının iletildiği özel kontrol fonksiyonlarının kullanılması
  • Aynı anda birkaç farklı koşul türü tanımlanabilmesi
  • Mantıksal değilleme için koşulu bir dizi içine yerleştirin, yani check_content: ['xxxx', [/yyyy/]], alınan veriler xxxx alt dizesini içeriyorsa ve aynı zamanda /yyyy/ düzenli ifadesi sayfada eşleşme bulmuyorsa isteğin başarılı sayılacağı anlamına gelir.

İsteğin başarılı olması için dizide belirtilen tüm kontrollerin geçmesi gerekir.

Örnek (yorum satırlarında isteğin başarılı sayılması için ne gerektiği belirtilmiştir):

let response = yield this.request('GET', set.query, {}, {
check_content: [
/<\/html>|<\/body>/, //alınan sayfada bu düzenli ifade çalışmalıdır
['XXXX'], //alınan sayfada bu alt dize bulunmamalıdır
'</html>', //alınan sayfada bu alt dize bulunmalıdır
(data, hdr) => {
return hdr.Status == 200 && data.length > 100;
} //bu fonksiyon true döndürmelidir
]
});

opts.decode

decode: 'auto-html' - kodlamanın otomatik olarak algılanması ve utf8 formatına dönüştürülmesi

Olası değerler:

  • auto-html - başlıklara, meta etiketlerine ve sayfa içeriğine göre (önerilen en uygun seçenek)
  • utf8 - belgenin utf8 kodlamasında olduğunu belirtir
  • <encoding> - diğer herhangi bir kodlama

opts.headers

headers: { ... } - başlıkları içeren hash, başlık adı küçük harfle belirtilir, cookie dahil edilebilir. Örnek:

headers: {
accept: 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
cookie: 'a=321; b=test',
'user-agent' 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}

opts.headers_order

headers_order: ['cookie', 'user-agent', ...] - başlıkların sıralama düzenini geçersiz kılmaya olanak tanır

opts.recurse

recurse: N - yönlendirmelerin (redirect) maksimum sayısı, varsayılan 7'dir, yönlendirmeleri devre dışı bırakmak için 0 kullanın.

opts.proxyretries

proxyretries: N - isteği yürütme denemesi sayısı, varsayılan olarak veri kazıyıcı ayarlarından alınır.

opts.parsecodes

parsecodes: { ... } - veri kazıyıcının başarılı kabul edeceği HTTP yanıt kodlarının listesi, varsayılan olarak veri kazıyıcı ayarlarından alınır. Eğer '*': 1 belirtilirse tüm yanıtlar başarılı sayılacaktır. Örnek:

parsecodes: {
200: 1,
403: 1,
500: 1
}

opts.timeout

timeout: N - saniye cinsinden yanıt zaman aşımı, varsayılan olarak veri kazıyıcı ayarlarından alınır.

opts.do_gzip

do_gzip: 1 - sıkıştırma (gzip/deflate/br) kullanılıp kullanılmayacağını belirler, varsayılan olarak etkindir (1), kapatmak için 0 değerini ayarlayın.

opts.max_size

max_size: N - bayt cinsinden maksimum yanıt boyutu, varsayılan olarak veri kazıyıcı ayarlarından alınır.

opts.cookie_jar

cookie_jar: { ... } - çerezleri içeren hash.

opts.attempt

attempt: N - mevcut deneme numarasını belirtir; bu parametre kullanıldığında, bu istek için yerleşik deneme işleyicisi yoksayılır.

opts.browser

browser: 1 - tarayıcı başlıklarının otomatik emülasyonu (1 - etkin, 0 - devre dışı)

opts.use_proxy

use_proxy: 1 - küresel Use proxy parametresinin üzerinde, JS veri kazıyıcı içindeki tek bir istek için proxy kullanımını geçersiz kılar (1 - etkin, 0 - devre dışı)

opts.noextraquery

noextraquery: 0 - istek URL'sine Extra query string eklenmesini devre dışı bırakır (1 - etkin, 0 - devre dışı)

opts.save_to_file

save_to_file: file - dosyayı belleğe yazmadan doğrudan diske indirmeye olanak tanır. file yerine dosyanın kaydedileceği ad ve yol belirtilir. Bu seçenek kullanıldığında, data ile ilgili her şey yoksayılır (check_content içindeki içerik kontrolü, response.data boş olacaktır vb.).

opts.data_as_buffer

data_as_buffer: 0 - data kısmının String (0) olarak mı yoksa Buffer nesnesi (1) olarak mı döndürüleceğini belirler, varsayılan olarak String döndürülür.

opts.bypass_cloudflare

bypass_cloudflare: 0 - Chrome tarayıcısını kullanarak CloudFlare JavaScript korumasını otomatik olarak atlar (1 - etkin, 0 - devre dışı)

opts.follow_meta_refresh

follow_meta_refresh: 0 - HTML meta etiketi aracılığıyla bildirilen yönlendirmelerin izlenmesine olanak tanır:

<meta http-equiv="refresh" content="time; url=..." />

opts.tlsOpts

tlsOpts: { ... } – https bağlantıları için ayarların iletilmesine olanak tanır ​

yield this.parser.request()

yield 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ç alma, 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 ön tanımlısı (preset)
  • overrideParams - çağrılan veri kazıyıcının ayarlarını geçersiz kılan hash
  • query - sorgu

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', ...]

overrideParams.needData

needData: 1 - yanıtta data/pages[] kısmının iletilip iletilmeyeceğini (1 - evet, 0 - hayır) belirler, optimizasyon için kullanılabilir.

tools.*

Küresel tools nesnesi, A-Parser'ın yerleşik fonksiyonlarına erişim sağlar ($tools.* şablon motoru araçlarının benzeri).

not

tools.query kullanılamaz, bunun yerine this.query kullanılmalıdır.

this.doLog()

Görev günlüğünün (log) tutulup tutulmadığını gösterir; günlüğün tutulmadığı ve this.logger.put argümanı olarak karmaşık bir ifadenin kullanıldığı durumlar için bir optimizasyon bayrağı olarak kullanılabilir.

this.logger.*

.put()

this.logger.put(message) - görev günlüğüne message satırını ekler

.putHTML()

this.logger.putHTML(code) - görev günlüğüne, textarea içinde görüntülenecek HTML kodunu çıktı olarak verir

yield this.sleep()

yield this.sleep(sec)

İş parçacığında sec saniye kadar gecikme ayarlar, ondalıklı olabilir.

yield this.mutex.*

İş parçacıkları arasında senkronizasyon için Mutex, bir kod bölümünü tek bir iş parçacığı için kilitlemeye olanak tanır.

.lock()

Kilidi bekleme; kilidi ilk ele geçiren iş parçacığı yürütmeye devam eder, diğer iş parçacıkları kilidin serbest bırakılmasını bekler.

.unlock()

Kilidi serbest bırakma; eğer bir sonraki iş parçacığı kilidi bekliyorsa (.lock()), yürütmeye devam eder.

this.cookies.*

Mevcut istek için çerezlerle (cookies) çalışma

.getAll()

Çerez dizisini alma

.setAll()

Çerezleri ayarlama, argüman olarak bir çerez dizisi iletilmelidir

.set()

this.cookies.set(host, path, name, value) - tek bir çerez ayarlama

this.query.add()

this.query.add(query, maxLvl)

İsteğe bağlı olarak maksimum seviyeyi (maxLvl) belirterek yeni bir sorgu (query) ekleme, tools.query.add() ile benzerdir. Sorgu (query) olarak parametreleri içeren bir hash iletilebilir, Sorgu Oluşturucu ile benzer şekilde çalışır.

Örnek:

this.query.add({
query: "http://site.com",
param1: "..",
...
});

this.proxy.*

Proxy ile çalışma

.next()

Proxy'yi bir sonrakine değiştir, eski proxy mevcut istek için artık kullanılmayacaktır.

.ban()

Proxy'yi değiştir ve engelle (servis IP üzerinden çalışmayı engellediğinde kullanılmalıdır), proxy veri kazıyıcı ayarlarında (proxybannedcleanup) belirtilen süre boyunca engellenecektir.

.get()

Mevcut proxy'yi al (isteğin yapıldığı son proxy)

.set()

this.proxy.set('http://127.0.0.1:8080', noChange = false) - bir sonraki istek için proxy ayarla, noChange parametresi isteğe bağlıdır, true olarak ayarlanırsa denemeler arasında proxy değişmez.

yield this.captcha.*

Captcha ile çalışma

.recognize()

yield this.captcha.recognize(preset, image, type, overrides) - tanıma için captcha yükleme

  • image - tanıma için resmin ikili (binary) verileri
  • preset - Util::AntiGateUtil::AntiGate için bir hazır ayarı (preset) belirtir
  • type şunlardan biri olarak belirtilir: 'jpeg', 'gif', 'png'

Sonuç şu alanları içeren bir hash olacaktır:

  • answer - resimdeki metin
  • id - daha sonra reportBad aracılığıyla hata bildirmek için captcha ID'si
  • error - eğer answer tanımlanmamışsa metin hatası

.recognizeFromUrl()

yield this.captcha.recognizeFromUrl(preset, url, overrides) - önceki yöntemle benzerdir, ancak captcha yüklemesi proxy kullanılmadan bağlantı (url) üzerinden otomatik olarak gerçekleştirilir.

.reportBad()

yield this.captcha.reportBad(preset, id, overrides) - servise captchanın yanlış çözüldüğünü bildir

this.utils.*

.updateResultsData()

this.utils.updateResultsData(results, data) - $pages.$i.data ve $data alanlarını otomatik doldurma yöntemi, sonuç sayfasının içeriğini eklemek için çağrılmalıdır.

.urlFromHTML()

this.utils.urlFromHTML(url, base) - HTML kodundan alınan bir bağlantıyı işler - varlıkları (&amp; vb.) çözer, isteğe bağlı olarak base (örneğin kaynak sayfanın URL'si) iletilebilir, böylece tam bir bağlantı elde edilebilir.

.url.extractDomain()

this.utils.url.extractDomain(url, removeDefaultSubdomain) - yöntem ilk parametre olarak bir bağlantı alır ve bu bağlantıdan alanı (domain) döndürür. İkinci isteğe bağlı parametre, www alt alan adının alandan kırpılıp kırpılmayacağını belirler. Varsayılan 0'dır - yani kırpılmaz.

.url.extractTopDomain()

this.utils.url.extractTopDomain(url) - yöntem ilk parametre olarak bir bağlantı alır ve alt alan adları olmadan bu bağlantıdan alanı döndürür.

.url.extractTopDomainByZone()

this.utils.url.extractTopDomainByZone(url) - yöntem ilk parametre olarak bir bağlantı alır ve alt alan adları dahil olmaksızın bu bağlantıdan alanı döndürür. Tüm bölgesel bölgelerle çalışır.

.url.extractMaxPath()

this.utils.url.extractMaxPath(url) - yöntem bir dize alır ve içinden URL'yi seçer.

.url.extractWOParams()

this.utils.url.extractWOParams(url)- yöntem bir bağlantı alır ve parametre dizesine kadar kırpılmış aynı bağlantıyı döndürür. Yani ? işaretine kadar olan URL'yi döndürür.

.removeHtml()

this.utils.removeHtml(string) - yöntem bir dize alır ve onu HTML etiketlerinden temizlenmiş olarak döndürür. this.utils.removeNoDigit(string) - yöntem bir dize alır, içindeki rakamlar dışındaki her şeyi siler ve sonucu döndürür.

.removeNoDigit()

this.utils.removeNoDigit(string) - yöntem bir dize alır, içindeki rakamlar dışındaki her şeyi siler ve sonucu döndürür

.removeComma()

this.utils.removeComma(string) - yöntem bir dize alır, içindeki .,\r\n gibi karakterleri siler ve sonucu döndürür

this.sessionManager.*

JS veri kazıyıcıda oturumları kullanmak için önce Oturum Yöneticisini başlatmanız gerekir. Bu, init() fonksiyonu yardımıyla yapılır

init() {
this.sessionManager.init({
//burada ek parametreler tanımlanabilir
});
}

this.sessionManager.init() içinde aşağıdaki parametreler kullanılabilir:

  • name - isteğe bağlı parametre, oturumların ait olduğu veri kazıyıcı adını geçersiz kılmaya olanak tanır, varsayılan olarak başlatmanın yapıldığı veri kazıyıcı adına eşittir
  • canChangeProxy - isteğe bağlı parametre, proxy değiştirme imkanı, varsayılan olarak 1'e eşittir
  • domain - isteğe bağlı parametre, bu veri kazıyıcı için kaydedilmiş tüm oturumlar arasında arama yapılacağını belirtir (değer belirtilmezse) ya da yalnızca belirli bir alan adı için (alan adını başında nokta ile belirtmek gerekir, örneğin .site.com)

Oturumlarla çalışmak için birkaç fonksiyon mevcuttur:

.get()

this.sessionManager.get() - yeni bir oturum alır, istek gerçekleştirilmeden önce çağrılmalıdır

.reset()

this.sessionManager.reset() - çerezleri temizler ve yeni bir oturum alır. Mevcut oturumla yapılan istek başarılı olmadıysa çağrılmalıdır.

.save()

this.sessionManager.save() - başarılı bir oturumu kaydeder veya oturuma rastgele veriler kaydeder

results.<array>.addElement()

results.<array>.addElement() yöntemi, results içindeki dizileri daha kolay doldurmaya olanak tanır. Kullanıldığında, dizideki değişkenlerin sırasını hatırlamaya ve bunları manuel olarak listelemeye gerek kalmaz.

results.serp.addElement({
link: 'https://google.com',
anchor: 'Google',
snippet: 'Loreps ipsum...',
});

init() ve destroy() yöntemleri

init() yöntemi görev başladığında çağrılır, destroy() ise tamamlandığında.

Kullanım örneği:

const puppeteer = require("puppeteer");
let globalBrowser;

class Parser {
constructor() {
...
}

async init() {
globalBrowser = await puppeteer.launch();
};

async destroy() {
if(globalBrowser)
await globalBrowser.close();
}
}

Faydalı bağlantılar