Przejdź do treści głównej

Metody pomocnicze (utils, tools, sleep)

this.utils.*

.updateResultsData(results, data)

await this.utils.updateResultsData(results, data) - metoda do automatycznego wypełniania $pages.$i.data oraz $data, należy ją wywołać w celu dodania treści strony wynikowej

.urlFromHTML(url, base)

await this.utils.urlFromHTML(url, base) - przetwarza link otrzymany z kodu HTML - dekoduje encje (& itp.), opcjonalnie można przekazać base - bazowy adres URL (na przykład URL strony źródłowej), w ten sposób można uzyskać pełny link

.url.extractDomain(url, removeDefaultSubdomain)

await this.utils.url.extractDomain(url, removeDefaultSubdomain) - metoda przyjmuje jako pierwszy parametr link i zwraca domenę z tego linku. Drugi opcjonalny parametr określa, czy odciąć z domeny subdomenę www. Domyślnie 0 - czyli nie odcinać.

.url.extractTopDomain(url)

await this.utils.url.extractTopDomain(url) - metoda przyjmuje jako pierwszy parametr link i zwraca domenę z tego linku, bez subdomen.

.url.extractTopDomainByZone(url)

await this.utils.url.extractTopDomainByZone(url) - metoda przyjmuje jako pierwszy parametr link i zwraca domenę z tego linku, również bez subdomen. Działa ze wszystkimi strefami regionalnymi

.url.extractMaxPath(url)

await this.utils.url.extractMaxPath(url) - metoda przyjmuje ciąg znaków i wybiera z niego adres URL

.url.extractWOParams(url)

await this.utils.url.extractWOParams(url)- metoda przyjmuje link i zwraca ten sam link przycięty do ciągu parametrów. To znaczy, że zwróci URL do znaku ?

.removeHtml(string)

await this.utils.removeHtml(string) - metoda przyjmuje ciąg znaków i zwraca go oczyszczonego z tagów HTML

.removeNoDigit(string)

await this.utils.removeNoDigit(string) - metoda przyjmuje ciąg znaków, usuwa z niego wszystko poza cyframi i zwraca wynik

.removeComma(string)

await this.utils.removeComma(string) - metoda przyjmuje ciąg znaków, usuwa z niego takie symbole jak .,\r\n i zwraca wynik

.getAllBlocks(html, regexp, opts?)

await this.utils.getAllBlocks(html, regexp, opts?) - pobieranie wszystkich bloków na stronie z odpowiednimi tagami zamykającymi, metoda przyjmuje ciąg HTML i wyrażenie regularne wskazujące na początek bloku (dowolne bloki posiadające parzyste tagi zamykające, np. <div>...</div>), w wyniku zwracana jest tablica wszystkich znalezionych bloków

Opcje opts:

  • searchStartIndex - wskazuje indeks w ciągu znaków, od którego należy zacząć wyszukiwanie, domyślnie 0
const blocks = this.utils.getAllBlocks(html, /<div [^>]*?class="results"/)

.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?)

await this.utils.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?) - metoda analogiczna do .getAllBlocks, zamiast wyrażenia regularnego do wyszukiwania początku bloku podaje się nazwę tagu, nazwę atrybutu, według którego będzie odbywać się wyszukiwanie (np. id, class) oraz wyrażenie regularne, które zostanie zastosowane do wartości danego atrybutu

const blocks = this.utils.getAllBlocksByAttr(html, 'div', 'class', /results/)

await tools.*

Globalny obiekt tools, pozwala uzyskać dostęp do wbudowanych funkcji A-Parser

Analog narzędzi silnika szablonów $tools.*

notatka

tools.query jest niedostępny, należy używać this.query

await tools.createTemplate(string)

Pozwala na użycie silnika szablonów Template Toolkit wewnątrz JavaScript scrapera.

let template = await tools.createTemplate("Hello [% content %]!")
template = typeof template == 'function' ? await template({content: 'World'}) : template
this.logger.put(template) // Output: Hello World!

Przykład użycia "Scraper tłumaczenia znaczników Markdown na HTML"

await this.sleep(sec)

await this.sleep(sec)

Ustawia opóźnienie w wątku na liczbę sekund (sec), może być wartością ułamkową.

await this.mutex.*

Mutex do synchronizacji między wątkami, pozwala zablokować sekcję kodu dla jednego wątku

.lock()

Oczekiwanie na blokadę (lock), wykonywanie będzie kontynuował pierwszy wątek, który przejął blokadę, pozostałe wątki będą oczekiwać na zwolnienie blokady

.unlock()

Zwolnienie blokady (lock), następny wątek będzie kontynuował wykonywanie, jeśli oczekiwał na blokadę - .lock()

results.<array>.addElement()

Metoda results.<array>.addElement() pozwala na wygodniejsze wypełnianie tablic w results. Przy jej użyciu nie trzeba pamiętać kolejności zmiennych w tablicy i wymieniać ich ręcznie.

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

this.isContextAlive()

Ta metoda jest niezbędna dla długo działających wątków, które przetwarzają zapytania w pętli, pozwalając na poprawne zakończenie pracy przy zatrzymaniu lub usunięciu zadania

while (this.isContextAlive()) {
await this.request(...)
}