Python SEO

PYTHON W ŚRODOWISKU SEO cz.II

Tak jak obiecałem w pierwszej części wpisu o wykorzystaniu Pythona w środowisku SEO, kontynuujemy serie, rozbudowując nasz skrypt o kolejne funkcjonalności. Seria skierowana jest dla osób, które nigdy wcześniej nie miały do czynienia z programowaniem. Dla osób które próbowały już swoich sił, zapraszam na przyszłe artykuły związane z zawansowanym wykorzystywaniem Pythona. Jeżeli nie widziałeś pierwszej części zapraszam Ciebie pod adres: https://wolfbrothers.net/python-w-srodowisku-seo/. Nie przedłużając wstępu – zaczynamy!

User-agent

Przypomnijmy sobie kod naszego skryptu:

Co w przypadku gdy zmienimy adres URL, na domenę która posiada zabezpieczenie przed botami? W tym celu zmieniamy domenę na np. https://wolfbrothers.net oraz drukujemy zmienną „r” pod którą kryje się nasze połączenie z wybraną domeną.

Po uruchomieniu skryptu otrzymujemy wydruk zmiennej „r”, w której znajduje się informacja o kodzie odpowiedzi 403 (Response [403]). Oznacza to nic innego, jak to że serwer poprawnie zinterpretował nasze zapytanie, natomiast konfiguracja zabroniła dostępu do zasobów ze względów bezpieczeństwa.

W jaki sposób możemy zmienić swoją tożsamość? Rozwiązaniem będzie User-agent, ale co to właściwie jest?

User-Agent to nic innego jak ciąg znaków, który przeglądarka lub aplikacja wysyła do każdej odwiedzonej przez nas strony internetowej przekazując naszą „tożsamość”. Typowy ciąg user-agent zawiera: rodzaj oraz wersję przeglądarki, system operacyjny, dostawcę oprogramowania. Serwery wykorzystują te dane do oceny możliwości komputera, optymalizacji wydajności strony i jej wyświetlania.

W zaimportowanej przez nas wcześniej bibliotece request mamy możliwość ustawienia własnego user-agenta.

Najpierw tworzymy zmienną „headers” do której dopisujemy wybrany przez nas User-Agent. Jak można zauważyć będziemy „podszywać” się pod użytkownika Maca z systemem operacyjnym Mac OS X oraz wykorzystującego przeglądarkę Chrome w wersji 39.0.2171.95. Dodatkowo będziemy korzystać z silnika przeglądarki internetowej (layout engine): AppleWebKit 537.36.

Silnik przeglądarki to oprogramowanie, które przetwarza nam pliki z których strona się składa(HTML,CSS, grafiki), a następnie renderuje nam ich rezultat

Ciekawym programem, który rozszyfrowywuje nam ciąg znaków User-Agenta, jest strona:

http://www.browser-info.net/useragent .

W polu User-Agent wkleiłem następujący ciąg znaków i wybrałem przycisk Analyze:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36

Po chwili możemy zobaczyć dokładne szczegóły naszego User-Agent, podzielonego na dane kategorie: Browser, OS, Platform, Layout Engine. W Internecie dostępnych jest bardzo dużo konfiguracji, które możemy wybrać i z nich korzystać.

Wracając do naszego kodu, dodaliśmy argument headers=headers w naszej zmiennej „r”.

Oznacza to że metoda request, przyjmuje argument w którym może przekazać User-Agent do odwiedzanej przez nas strony internetowej. Aby go przekazać musimy przypisać do stałej wartości headers (zaznaczona na niebiesko), że nasza nowa „tożsamość” znajduje się w zmiennej headers (zaznaczona na biało). Dla ułatwienia możemy zmienić nazwę zmiennej na np. „tozsamosc”.

Przetestujmy teraz czy nasz kod działa i pobiera meta title oraz meta description.

Otrzymaliśmy meta tagi oraz informację, że kod odpowiedzi wynosi 200.

Zapisywanie danych

Jeżeli nasz skrypt potrafi połączyć się z wybraną przez nas stroną internetową oraz pobrać podstawowe informację jak meta title oraz meta description, warto skupić się na ich zapisywaniu. Mamy kilka możliwości zapisu informacji. Najprostszym i najszybszym będzie zapisywanie do pliku txt, kolejną opcją jest zapis do arkuszów: .xlsx oraz .csv oraz zapis do bazy danych. Nie są to oczywiście wszystkie możliwości zapisów danych. Najwygodniejszym sposobem zapisu, dzięki któremu będziemy mogli analizować nasze dane i je rozbudowywać będzie zapis do formatu .xlsx (znanego z arkusza kalkulacyjnego Microsoft Excel).

Pomocna będzie tutaj biblioteka openpyxl, która pozwoli na zapisywanie informacji do arkusza kalkulacyjnego. Dodajmy kilka nowych linijek kodu, które obsłużą zapisywanie danych.

  • from openpyxl import load_workbook

Z biblioteki openpyxl importujemy moduł load_workbook, który odpowiada za zarządzanie arkuszem kalkulacyjnym. Jeżeli nie mamy zainstalowanej tej biblioteki, w terminalu wprowadzamy następujący ciąg znaków: pip install openpyxl

Dodatkowo importujemy bibliotekę datetime, która będzie zapisywała nam datę sprawdzenia meta title oraz meta description.

  • now = datetime.datetime.now().strftime(“%d-%m-%Y”)

Tworzymy nową zmienną o nazwie „now”, do której będziemy zapisywać obecną datę. Musimy określić także format daty – wybierzemy standardowy obowiązujący w Polsce „dzień-miesiąc-rok”. W kodzie musimy zapisać to w następujący sposób: .strftime(“%d-%m-%Y”).

  • wb = load_workbook(‘dane.xlsx’)

Pierwszym krokiem zanim program załaduje nasz arkusz kalkulacyjny, będzie stworzenie w folderze pliku dane.xlsx. Powyższe polecenie przypisuje nam do zmiennej „wb”, załadowanie pliku o nazwie dane.xlsx, abyśmy mogli wykonywać na nim operacje.

  • sheet = wb[‘Arkusz1’]

Po załadowaniu całego pliku, musimy zdefiniować z którego arkusza będziemy korzystać. Podczas tworzenia nowego pliku w programie excel, mamy domyślnie kilka arkuszy:

Do zminnej “sheet” dopisaliśmy informację, aby skrypt wpisywał lub pobierał dane z arkusza o nazwie „Arkusz1”. Dla swoich potrzeb możemy dowolnie modyfikować zmienne i nazwy.

  • row_counter = sheet.max_row +1

Kolejnym problemem z którym musimy się zmierzyć jest to, aby skrypt po każdym uruchomieniu zapisywał wynik w nowej linii, a nie nadpisywał pierwszej. Skorzystamy tutaj z właściwości biblioteki, która umożliwia policzenie wszystkich wierszy (.max_row).

Tworzymy nową zmienną o nazwie row_counter i przypisujemy do niej właściwość max_row, którą ma wykorzystać na obiekcie sheet, czyli tym w którym zdefiniowaliśmy „Arkusz1”. Inkrementujemy także otrzymaną wartość, dopisując +1, zapewni nam to że program zbada ile wierszy w arkuszu jest zajętych i doda kolejny wiersz w którym będziemy wpisywać nowe dane.

 

  • sheet[“A”+str(row_counter)] = now

Przedostatnim już etapem będzie zapis danych do wybranej kolumny  i wiersza. Wykorzystujemy nasz „Arkusz1” który kryje się pod zmienną „sheet”, następnie wybieramy kolumnę „A”, w której umieścimy datę oraz określamy żeby wpisywał wartość w nowym wierszu. Na samym końcu mamy przypisanie do wybranego przez nas wiersza, zmiennej „now”, w której znajduje się obecna data.

  • save(‘dane.xlsx’)

Ostatnim etapem jest zapis naszego arkusza kalkulacyjnego, bez tego wprowadzone zmiany nie zostaną zachowane.

 

Aby przetestować nasz skrypt, uruchomimy go kilkukrotnie i zobaczymy rezultat:

Tak jak spodziewaliśmy się w kolumnie „A”, skrypt dopisał nam obecną datę w kilku wierszach odpowiadających ilości jego uruchomienia. Usuniemy teraz otrzymane daty i dopiszemy linijki kodu odpowiadające za zapis Meta title oraz Meta description.

Do kolumny „B” dopisujemy meta title, natomiast do kolumny „C” dopisujemy meta description.

Zapis pliku przenosimy na sam koniec skryptu i uruchamiamy. Poniżej efekt naszej pracy:

Cały kod skryptu dostępny pod adresem: https://paste.ofcode.org/r9B6vJ3etneSq9sgdTzt5y

W trzeciej części skonfigurujemy harmonogram zadań, aby skrypt uruchamiał się każdego dnia o wybranej przez nas porze oraz zbudujemy mechanizm, który porównuje nowe meta dane i wysyła nam informację, jeżeli coś się zmieniło.