Bardzo często można natrafić na witryny zawierające zestawienia katalogów, precli, blogów dofollow czy proxy. Czasem chcielibyśmy pozyskać z takiej witryny same odnośniki. Przy kilkuset podstronach, na każdej 20-100 odnośników kopiowanie ręczne jest nierealne… chyba że ktoś ma sporo wolnego czasu i cierpliwości. Klikanie, kopiuj, wklej z wykorzystaniem notatnika ech… to nie dla nas. Znam lepszą metodę.
Do szybkiego pozyskiwania linków z odwiedzanych witryn posłuży nam przeglądarka Google Chrome wyposażona w dodatek Scraper.
Google Chrome Scraper to niepozorne narzędzie, którego celem jest pozyskiwanie konkretnych danych ze stron internetowych oraz eksport informacji do arkusza kalkulacyjnego Google Docs. Do obróbki danych domyślnie wykorzystuje wyrażenia XPath (XML Path Language), których złożoność jest o wiele mniej skomplikowana aniżeli tradycyjne wyrażenia regularne. Nie oznacza to, że XPath cierpi z powodu braku funkcjonalności, wręcz przeciwnie, jeśli chodzi o filtrowanie danych jest rewelacyjne. Nie wiem jak u Was z tym jest, ale osobiście mam odczucie, iż z pamięci o wiele łatwiej wpisać selektory XPath, niż klasyczne regułki przynależne do wyrażeń regularnych.
Uruchamiamy przeglądarkę Chrome z zainstalowanym dodatkiem Scraper i zaczynamy zabawę…
Listy katalogów, wyciąganie URL wyrażeniami XPath
Wpierw zajmiemy się katalogami. Przejdę od razu do przykładów. Pierwsze zestawienie, chyba jedno z popularniejszych www.katalogiseo.info
Wchodzimy na stronę, wywołujemy menu kontekstowe i wybieramy Scrape similar. Normalnie powinniśmy zaznaczyć wybrany tekst (link) i dopiero wtedy dokonać wyboru opcji, w przypadku zaawansowanego scrapingu to jest zbędne, albowiem regułkę i tak będzie trzeba zdefiniować od zera.
Mamy wywołany moduł Scraper, w lewej części okna znajdziemy pole XPath Reference, w którym to należy wpisać wyrażenie służące do wydobywania linków ze strony.
Aby zbudować wyrażenie warto przejść do kodu źródłowego i zobaczyć co w trawie piszczy. Do inspekcji danego fragmentu użyjemy Firebug. Zaznaczamy pierwsze od góry hiperłącze do katalogu i z menu kontekstowego wybieramy Inspect with Firebug Lite.
Interesuje nas hierarchia znaczników, co w czym się znajduje, co jaką klasą jest oznaczone. To pozwoli sprecyzować, który element witryny należy wyodrębnić.
Dla www.katalogiseo.info przykładowe wyrażenie XPath ma postać…
//table/tbody/tr/td/a[@class='broken']
Na zrzucie ekranu kolorem żółtym zaznaczyłem, które elementy zostały wykorzystane do zbudowania wyrażenia. Nie będę opisywał schematów reguł i sposobów budowania wyrażeń, tego typu informacje znajdziecie w dokumentacji XPath.
Teoretycznie gdybym ograniczył się do wskazania /a[@class=’broken’] na wyjściu także otrzymam zestaw linków, natomiast wyznaję zasadę, czym precyzyjniej tym lepiej.
Po zbudowaniu wyrażenia wprowadzamy go w polu XPath Reference, po czym klikamy Scrape lub wciskamy klawisz ENTER. Wynikiem polecenia jest lista adresów URL.
Teraz najciekawsza opcja. W prawym dolnym rogu istnieje przycisk oznaczony Export to Google Docs. Wszelkie przechwycone dane możemy łatwo zapisać do skoroszytu.
Dodatkową zaletą wtyczki jest zapamiętywanie wyrażeń (Presets). Zapisanie schematów bardzo pomaga podczas pobierania informacji z wielu stron/podstron.
W przypadku użycia funkcji CTRL+A i CTRL+V, po wklejeniu odnośników do notatnika powstanie lista numerowana, zatem aby uzyskać czyste informacje będzie trzeba obrobić dane wyrażeniami regularnymi.
Kilka innych przykładowych patternów XPath do wykorzystania:
- www.katalogi.net.pl: //table/tbody/tr/td/a[@class=’tytul’]/@href
- dobre-katalogi.pl: //strong/a/@href
- autospis.pl: //div/table/tbody/tr/td/a[@class=’nazwak’]/@href
- www.moje-katalogi.pl: //table/tbody/tr/td/table/tbody/tr/td/font[@color=’#0000FF’]
Pozyskiwanie linków z wyników wyszukiwania
Metodę można zastosować dla wyników wyszukiwania. Przykładowe wyrażenie XPath pobierające z Google adresy URL:
//div/div/ol/li/div/h3[@class='r']/a/@href
Dla wyszukiwarki Bing…
//div[@class='sb_tlst']/h3/a/@href
Dla Blekko…
//li/div/h2[@class='title']/a/@href
Czasem aby pobrać pewne informacje ze strony nie ma sensu stosować wyspecjalizowanych automatów. Niniejszą metodę wyodrębniania odnośników przedstawiłem jako ciekawostkę.