Przejdź do treści głównej

Narzędzia szablonów (tools)

W silniku szablonów Template Toolkit dostępna jest zmienna globalna $tools, która przechowuje zestaw narzędzi dostępnych w dowolnym szablonie oraz wewnątrz JS scraperów. Istnieje również zmienna $tools.error, która zawiera opis błędów, jeśli takie wystąpią podczas pracy wszystkich narzędzi.

Dodawanie zapytań $tools.query.*

To narzędzie pozwala dodawać zapytania do już istniejących bezpośrednio podczas pracy zadania, tworząc je na podstawie już zeskrapowanych wyników. Może być używane jako odpowiednik funkcji Parse to level w tych scraperach, w których nie została ona zaimplementowana. Istnieją 2 metody:

  • [% tools.query.add(query, maxLevel) %] - dodaje pojedyncze zapytanie
  • [% tools.query.addAll(array, item, maxLevel) %] - dodaje tablicę zapytań

Parametr maxLevel wskazuje, do którego poziomu należy dodawać zapytania i jest opcjonalny: jeśli zostanie pominięty, scraper będzie dodawał nowe zapytania tak długo, jak będą one dostępne. Zaleca się również włączenie opcji Unique queries (Unikalne zapytania), aby uniknąć zapętlenia i nadmiernej pracy scrapera.

Istnieje możliwość ustawienia dowolnego poziomu dla podzapytań. Można to wykorzystać do rozdzielenia logiki, tj. gdy każdy poziom to oddzielna funkcjonalność.

przykład:

  • [% tools.query.add({query => query, lvl => 1}) %] - dodaje zapytanie na określony poziom.

przykład dla JS:

this.query.add({
query: "some query",
lvl: 1,
})
Przykład

Wynik działania presetu na zrzucie ekranu:

scraper:
parser
what is parsing in programming
parsing in compiler
compiler and parser development
what is syntax analysis
difference between lexical analysis and syntax analysis
syntax analyzer
parser programming language
parser:
parser definition
xml parser
parser generator
parser swtor
parser c++
ffxiv parser
html parser
parser java
what is parsing in programming:
parse wikipedia
parser compiler
what is a parser
parsing programming languages
definition of parser
parsing c++
parser define
parsing java
html parser:
online html parser
html parser php
html parser java
...

Przetwarzanie struktur JSON $tools.parseJSON()

To narzędzie pozwala na deserializację danych w formacie JSON do zmiennych (obiektu) dostępnych w silniku szablonów. Przykład użycia:

[% tools.parseJSON(data) %]

Po deserializacji do kluczy z otrzymanego obiektu można odwoływać się jak do zwykłych zmiennych i tablic. Jeśli jako argument zostanie podany ciąg znaków z nieprawidłowym JSON, scraper zapisze błąd w $tools.error.

Przykład

Dane wyjściowe w formacie CSV $tools.CSVline

To narzędzie automatycznie konwertuje wartości do formatu CSV i dodaje znak nowej linii, dzięki czemu w formacie wyniku wystarczy wymienić potrzebne zmienne, a na wyjściu powstanie poprawny plik CSV, gotowy do importu do Google Docs / Excel / itp.

Przykład użycia:

[% tools.CSVline(query, p1.serp.0.link, p2.title) %]

Wideo z użyciem $tools.CSVline():

Praca z bazą danych SQLite $tools.sqlite.*

To narzędzie pozwala na łatwą i pełną pracę z bazami danych SQLite. Istnieją trzy metody:

  • $tools.sqlite.get() - metoda pozwalająca pobrać pojedynczą informację z bazy danych za pomocą SELECT, na przykład:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
  • $tools.sqlite.run() - metoda pozwalająca wykonywać operacje na bazie danych (INSERT, DROP itp.), na przykład:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
  • $tools.sqlite.all() - metoda pozwalająca wyświetlić wszystkie dane z tabeli, na przykład:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]

Podstawianie user-agent $tools.ua.*

To narzędzie jest przeznaczone do podmiany user-agent w scraperach, które go używają (na przykład Net::HTTPNet::HTTP). Istnieją dwie metody:

  • $tools.ua.list() - zawiera pełną listę dostępnych user-agentów.
  • $tools.ua.random() - wyświetla losowy z dostępnych user-agentów.

Przykład użycia:

Przykład
wskazówka

Lista wszystkich user-agent jest przechowywana w pliku files/tools/user-agents.txt, który w razie potrzeby można edytować.

notatka

Przy użyciu tego narzędzia dla parametru User agent w scraperach, należy podać go jawnie:

[% tools.ua.random() %]

Wsparcie JS w tools $tools.js.*

To narzędzie pozwala dodawać własne funkcje JS i używać ich bezpośrednio w silniku szablonów. Obsługiwane jest również użycie modułów Node.js. Funkcje dodaje się w Tools -> JavaScript Editor

Praca z base64 $tools.base64.*

To narzędzie pozwala pracować z base64 bezpośrednio w scraperze. Narzędzie to posiada 2 metody:

  • $tools.base64.encode() - koduje tekst do base64
  • $tools.base64.decode() - dekoduje ciąg base64 na tekst

Przykład użycia:

Przykład

Katalog danych $tools.data.*

To narzędzie to w rzeczywistości obiekt zawierający dużą ilość predefiniowanych informacji - języki, regiony, domeny dla wyszukiwarek itp. Pełna lista elementów (może ulec zmianie w przyszłości):

"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"

Każdy z tych elementów jest tablicą lub hashem danych, zawartość można sprawdzić wyprowadzając dane np. w formacie JSON:

[% tools.data.GoogleDomains.json() %]

Przechowywanie danych w pamięci $tools.memory.*

Prosty magazyn klucz/wartość w pamięci, wspólny dla wszystkich zadań, zapytań API itp., resetowany przy ponownym uruchomieniu A-Parser. Istnieją trzy metody:

  • [% tools.memory.set(key, value) %] - ustawia wartość value dla klucza key
  • [% tools.memory.get(key) %] - zwraca wartość odpowiadającą kluczowi key
  • [% tools.memory.delete(key) %] - usuwa z pamięci wpis o kluczu key

Pobieranie informacji o wersji A-Parser $tools.aparser.version()

To narzędzie pozwala uzyskać informację o wersji A-Parser i wyświetlić ją w wyniku.

Przykład użycia:

[% tools.aparser.version() %]

Pobieranie ID zadania i liczby wątków $tools.task.*

To narzędzie pozwala uzyskać informację o id zadania i pokazać liczbę wątków. Istnieją dwie metody:

  • [% tools.task.id %] - zwraca id zadania
  • [% tools.task.threadsCount %] - zwraca liczbę wątków używanych w zadaniu

Zatrzymywanie zadania $tools.task.stop()

To narzędzie pozwala zatrzymać wykonywanie zadania w dowolnym momencie. Jako argument przyjmuje ciąg znaków, który powinien zawierać przyczynę zatrzymania zadania.

Przykład użycia:

[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]