Formatowanie zapytań
Query format (Format zapytania) - pozwala dodawać podstawienia i formatować zapytanie do pożądanego wyglądu przy użyciu szablonów, stosowany dla każdego zapytania.
Formaty zapytań

- Format zapytania dla 1-go scrapera
- Format zapytania dla 2-go scrapera
- Ogólny format zapytań
Istnieją 2 sposoby określenia szablonu:
- Ogólny format zapytań, jest on przetwarzany jako pierwszy i obsługuje podstawienia
- Format zapytania dla każdego scrapera - pozwala ustawić specyficzny format dla poszczególnych scraperów
Przeanalizujmy przykład na zrzucie ekranu, załóżmy, że jako zapytań używamy pliku z listą domen w takiej postaci:
google.com
a-parser.com
yandex.ru
Ogólny format zapytania jest ustawiony jako:
http://$query
Przed każdym zapytaniem źródłowym (domeną) zostanie wstawiony ciąg http://, zapytanie zostanie przekształcone google.com -> http://google.com
Format zapytania dla 1-go scrapera pozostał niezmieniony, będzie on scrapować zapytanie http://google.com
Format zapytania dla 2-go scrapera wygląda następująco:
site:$query
Zapytanie dla tego scrapera zostanie przekształcone: http://google.com -> site:http://google.com
Szablony w zapytaniach
W formacie zapytania w pełni obsługiwany jest silnik szablonów Template Toolkit, jako zmienne dostępne są:
$query- zapytanie po sformatowaniu przez ogólny format wyniku$query.num- numer porządkowy zapytania$query.lvl- poziom zagłębienia zapytania przy użyciu opcji Parse to level lub Parse all results$query.orig- pierwotne zapytanie przed formatowaniem$query.first- pierwsze zapytanie przy użyciu opcji Parse to level lub Parse all results$query.prev- pokazuje zapytanie, które było na poprzednim poziomie, działa dla
HTML::LinkExtractor, $tools.query.add oraz scraperów JS this.query.add- Wszystkie zmienne utworzone przez Konstruktor zapytań
Makra podstawień
Ogólny format zapytania obsługuje następujące makra:
| Makro | Opis | Przykłady |
|---|---|---|
| {az:START:END} | Podstawienie sekwencji cyfrowo-znakowej. Zamiast START podaje się początek sekwencji, zamiast END - koniec. Długość END musi być większa lub równa długości START. Znaki na końcu sekwencji END muszą występować po (w porządku alfabetycznym) znakach na początku sekwencji START. Można używać dowolnych sekwencji znaków UTF-8 | {az:a:z} - podstawienie wszystkich znaków od a do z (a, b, c, ..., x, z). {az:aaa:zzz} - podstawienie wszystkich znaków od aaa do zzz (aaa, aab, aac, ..., zzx, zzz). {az:a:zz} - podstawienie wszystkich znaków od a do zz (a, b, c, ... aa, ab, ..., zx, zz). {az:00:99} - podstawienie wszystkich liczb od 00 do 99 (00, 01, 02, ..., 98, 99). {az:a:yyy} - podstawienie wszystkich znaków cyrylicy od a do yyy (a, b, ... aa, ab, ... yyu, yyy) |
| {each:WORD1,WORD2,...} | Podstawienie określonych słów WORD1, WORD2 itd., długość nieograniczona | {each:green,blue,red,black} - podstawienie słów green, blue, red, black. {each:,buy,sell} - podstawienie pustego słowa, a następnie buy i sell |
| {subs:NAME} | Podstawienie dodatkowych słów z plików w folderze queries/subs/. Zamiast NAME należy podać nazwę pliku, bez rozszerzenia .txt | {subs:zones} - podstawienie wszystkich linii z pliku queries/subs/zones.txt |
| {num:START:END} | Makro iteruje po liczbach w podanym zakresie. Zamiast START podaje się początek przedziału, zamiast END - koniec. Obsługiwane są liczby ułamkowe. | {num:1:1000} - podstawienie wszystkich liczb od 1 do 1000 (1, 2, 3 ..., 999, 1000) |
| {num:START:END:STEP} | Makro iteruje po liczbach w podanym zakresie, z określonym krokiem. Zamiast START podaje się początek przedziału, zamiast END - koniec, zamiast STEP - krok. Obsługiwane są liczby ułamkowe. | {num:0:1000:10} - podstawienie wszystkich liczb od 0 do 1000 z krokiem 10 (0, 10, 20 ..., 990, 1000) |
| {num:END:START} | Makro iteruje po liczbach w podanym zakresie w odwrotnej kolejności. Zamiast END - podaje się koniec przedziału, START oznacza początek przedziału. Obsługiwane są liczby ułamkowe. | {num:1000:1} - podstawienie wszystkich liczb od 1000 do 1 (1000, 999, 998, ..., 2, 1) |
| {num:END:START:STEP} | Makro iteruje po liczbach w podanym zakresie w odwrotnej kolejności, z określonym krokiem. Zamiast END - podaje się koniec przedziału, START oznacza początek przedziału, zamiast STEP - krok. Obsługiwane są liczby ułamkowe. | {num:1000:1:10} - podstawienie wszystkich liczb od 1000 do 1 z krokiem 10 (1000, 990, 980, ..., 10, 1) |
⏩ Wideo: Makra podstawień
W tym wideo omówiono:
- makro
{num}na przykładach przechodzenia przez strony i iteracji po współrzędnych w scraperze
Maps::Google - makro
{az}na przykładzie scrapowania z inurl: w celu zwiększenia liczby zapytań i odpowiednio wyników - makro
{each}na przykładzie scrapowania podpowiedzi do generowania fraz
Łączenie makr podstawień
Makra podstawień można łączyć. Kompleksowy przykład:
$query site:{subs:zones} {az:aa:zz}
Załóżmy, że jednym z zapytań do scrapowania było viagra, a w pliku queries/subs/zones.txt znajduje się następująca lista stref: com, net, org, wtedy do scrapowania trafi następujący zestaw kombinacji:
viagra site:com ab
...
viagra site:net jj
...
viagra site:eek.rg zz
Całkowita liczba zapytań będzie odpowiadać iloczynowi możliwych kombinacji:
1 zapytanie (viagra) x 3 strefy ({subs:zones}) x 676 wariacji znakowych ({az:aa:zz}) = 2028 zapytań