Analiza adresów i podstron z wykorzystaniem Python oraz ChatGPT

Opublikowane:

Zawsze chciałem nauczyć się programować na tyle dobrze, abym mógł bez problemów w czasie jednego czy dwóch wieczorów stworzyć stronę internetową lub aplikację w wersji MVP, czyli Minimum Viable Product (Minimalna, działająca wersja produktu).

MVP, czyli Minimum Viable Product, to podstawowa wersja produktu, która zawiera tylko najważniejsze funkcje. Celem MVP jest przetestowanie pomysłu na rynku, zbieranie opinii użytkowników i weryfikacja założeń, zanim zainwestuje się w pełną wersję produktu. Dzięki temu można szybko wprowadzać zmiany i dostosować produkt do potrzeb klientów.

Naturalnie w zdecydowanej większości chodziło też o stworzenie narzędzi, które będą pomocne przy na przykład tworzeniu treści na strony, analizowania stron internetowych i wiele więcej. Niezależnie od celu, umiejętność programowania zawsze była dla mnie pewnym zagadnieniem, które chciałem zrealizować.

Nie to, że nigdy nie próbowałem. Swego czasu całkiem sporo kombinowałem w PHP. Było to o tyle naturalne, że w prosty sposób mogłem przygotowany kod HTML i CSS puścić w ruch. Nie były to jednak jakieś skomplikowane rzeczy. Z jakiegoś powodu, programowanie obiektowe wykorzystujące klasy przerastało mnie. Lata mijały, a ja zamiast PHP zgłębiałem kolejne CMSy, ustawienia wtyczek i tomy dokumentacji związanych z SEO. Miałem jeszcze krótką przygodę z językiem Ruby. Gdzieś na półce mam książki o tym języku i frameworku Ruby on Rails!

Lata mijały a moja chęć nauczenia się programowania nie malała. Zamiast jednak zająć się nauką programowania cały swój czas poświęcałem na SEO. Analizując kolejne dane, dokumentacje oraz narzędzia zauważyłem, że coraz częściej wykorzystywany jest język Python do wszelkich działań opartych o dane, treści i analizy. Zacząłem w związku z tym próbować cokolwiek w Pythonie działać, ale od początku wiedziałem, że raczej nic nie osiągnę z racji braku czasu oraz skupienia się Pythona na pisaniu kodu w sposób obiektowy (czyli wykorzystujący klasy na potęgę).

Programowanie i pisanie kodu z AI

I pewnie ta historia nie miała by happy endu, gdyby nie pojawienie się modeli językowych oraz rozwiązań takich jak ChatGPT czy Ollama. Nagle okazało się, że mając pomysł, i odpowiednio rozbijając kolejne elementy na małe kroki, możliwe jest otrzymanie działającego kodu, który realizuje założenia MVP. Dodatkowo, wcale nie muszę poświęcać kilku wieczorów a jeden i to nie cały!

A jakieś proste narzędzia? 15 minut i są gotowe! Przykładowo – potrzebujesz odpytać 20 tysięcy adresów URL o ich status? Czy działają (200), mają przekierowania (301) a może zwracają jakiś błąd 5XX? Kilka chwil i masz gotowy skrypt Python który bez problemu uruchomisz na swoim komputerze.

Potrzebujesz stworzyć crawler strony który nie będzie ograniczony do arkuszy Google? A może taki który będzie w stanie przeanalizować stronę zbudowaną z wykorzystaniem dynamicznych rozwiązań jak Angular? Nie ma sprawy! ChatGPT przygotuje dla Ciebie odpowiedni kod, który będziesz mógł wykorzystać w swoich działaniach!

Jak przygotować zapytanie do AI o kod?

Pokażę Ci jak ja to robię! Oczywiście zawsze możesz dodać kolejne rozwiązania lub poprosić Chat o rozbudowę/zmianę w swojej aplikacji. Pamiętaj też, że lepiej poprosić wiele razy o małe rzeczy niż oczekiwać, że AI zwróci Ci gotową aplikację składającą się z wielu plików.

Z mojego doświadczenia dobrze sprawdza się wskazywanie w prompt’cie/zapytaniu do AI co chcemy osiągnąć, ale także jakie dane i w jaki sposób przekażemy oraz jakich danych i w jakiej formie oczekujemy. Aby jeszcze lepiej zrozumieć tworzenie prostych narzędzi i skryptów w Python z wykorzystaniem ChatGPT, pokażę Ci krok po kroku jak przygotowałem prosty skrypt w Python który pomógł mi przeanalizować ponad 20 tysięcy adresów URL w sklepie internetowym.

Założenia były proste: Mam listę ponad 20000 URLi pobranych ze sklepu internetowego. Moim celem było sprawdzić który adres zwraca kod 200 (OK), który jest niedostępny i zwraca kod 404 a który jest np. przekierowany na inny (301). Do tego jeszcze, mając na uwadze, że sklep uruchomiony jest na platformie IAI, mogło się zdarzyć, że po wykonaniu pewnej ilości zapytań, zwrócony zostałyby kod błędu 429, czyli Too Many Requests (Za dużo Żądań) który powodował, że kolejne zapytania byłyby blokowane przez serwer. Moje IP zostało dodane do białej listy w IAI dzięki czemu teoretycznie mogę zadać dowolną liczbę zapytań bez bycia „przyciętym”.

Oto jak wyglądała moja współpraca z ChatGPT

Po pierwsze konieczne było zdefiniowanie moich potrzeb, wymagań oraz oczekiwań. Sam zdecydowałem, że chcę korzystać z języka Python ponieważ jak wspomniałem wcześniej – chcę się go nauczyć oraz po prostu będzie on dobry do działań, które chcę wykonać.

Oto mój prompt:

Przygotuj kod skryptu w python w taki sposób, aby realizował działania kolejno:

1. Pobierz adres z pliku urls.txt
2. Wybierz pierwsze, nie używane ostatnio proxy
3. Połącz się ze stroną i sprawdź nagłówek odpowiedzi (2xx, 3xx, 4xx, 5xx)
4. Po uzyskaniu poprawnego kodu (innego niż 429), dodaj go do bazy danych SQL. Dane zapisuj wg schematu ID;Data połączenia; URL; kod odpowiedzi
5. W przypadku wystąpienia kodu odpowiedzi 3xx, dodaj dodatkowy element w SQL po "kod odpowiedzi" w postaci "adres docelowy" i wstaw tam adres, do którego kieruje przekierowanie
6. W sytuacji, gdy adres zwraca błąd 429 lub inny związany z timeout, oznacz odpowiednio te adresy. Jeżeli błąd powtórzy się dla 10 adresów pod rząd - odczekaj 60 sekund przy wykonywaniu kolejnych operacji.
7. Po zakończeniu połączenia dla jednego URL, pobierz kolejny URL i wybierz następne dostępne PROXY oraz kontynuuj od punktu 3.

W konsoli podawaj stan procentowy na bazie obliczeń wszystkich adresów, aktualnie przetwarzanego adresu, wykorzystywanego proxy oraz czasu jaki minął od wywołania kodu.

Dlaczego chciałem, aby skrypt tak funkcjonował?

Po pierwsze, trzymanie 20+ tysięcy URLi w pliku ze skryptem jest kiepskim rozwiązaniem dla czytelności kodu. Po drugie, trzymając adresy w osobnym pliku, można serwować do skryptu dowolne adresy. Będzie on bowiem działał w sposób uniwersalny.

Druga sprawa – pomyślałem, że w moim skrypcie można dodać obsługę proxy.

Proxy to pośrednik między urządzeniem użytkownika a internetem. Gdy korzystasz z proxy, twoje żądania są najpierw przekazywane do serwera pośredniczącego, który następnie przesyła je dalej do docelowego serwera. Otrzymane odpowiedzi również przechodzą przez proxy, zanim dotrą do ciebie. Proxy może służyć do zwiększenia prywatności, omijania blokad regionalnych lub poprawy bezpieczeństwa.

Po co obsługa proxy w tak prostym skrypcie? Cóż, mając na uwadze ilość adresów do przejrzenia oraz obostrzenia serwera, wydawało mi się rozsądne zabezpieczenie się przed możliwym zablokowaniem dostępu do analizy strony z jednego adresu. Dodatkowo, korzystanie z proxy pozwala na szybsze wygenerowanie odpowiednich wyników. W teorii, ilość proxy zwiększa prędkość otrzymywania wyników o tyle razy, ile dostępnych jest proxy.

W początkowym rozrachunku, można przyjąć, że 20 tysięcy URLi zostanie przeanalizowane w czasie około 20000 sekund (około 333 minut lub 5,5 godzin). Naturalnie, można znacząco przyspieszyć czas realizacji skryptu zmniejszając ilość czasu odpytywania pomiędzy kolejnymi adresami z 1 sekundy do np. pół sekundy. Dodatkowo, wykorzystanie proxy może skrócić ten czas z 5 do 1 godziny! Generalnie – proxy to totalnie przydatne rozwiązanie!

Zdradzę Ci jednak, że przy wykonywaniu tego skryptu a zwłaszcza przez to, że działam na platformie IAI, musiałem zrezygnować z korzystania proxy.

Wracając jednak do samego promtu – trzecia sprawa, to zapis danych. Przerabiałem już skrypty które generowały dokumenty HTML z tabelą i odpowiednimi danymi. Tyczyło się to jednak zdecydowanie mniejszych baz URL mających w porywach 500 adresów.

Mając bazę wielu tysięcy adresów, zdecydowałem, że najlepiej będzie trzymać zebrane dane w bazie danych. Zamiast jednak tworzyć bazy MySQL, Postgres czy inny, skorzystałem z prostego sposobu zapisywania danych do bazy SQL znajdującej się w pliku.

Na koniec dodałem poprosiłem jeszcze o stworzenie zabezpieczenia, które sprawi, że po 10 błędnych zapytaniach (zwracających kod 429) działanie skryptu zostanie zawieszone na 60 sekund. Powinno to dać czas serwerom Proxy „ochłonąć” i nie być wykrywanymi przez IAI jako rozwiązania generujące zautomatyzowane zapytania.

W efekcie otrzymałem od ChatGPT taki oto kod:

import requests
import sqlite3
import time
from datetime import datetime

# Ścieżka do pliku z URL-ami i proxy
url_file = 'urls.txt'
proxy_file = 'proxies.txt'

# Zainicjalizowanie bazy danych SQLite
conn = sqlite3.connect('responses.db')
c = conn.cursor()

# Tworzenie tabeli, jeśli nie istnieje
c.execute('''CREATE TABLE IF NOT EXISTS responses (
    id INTEGER PRIMARY KEY,
    connection_date TEXT,
    url TEXT,
    response_code INTEGER,
    target_url TEXT
)''')
conn.commit()

# Funkcja do ładowania URL-i z pliku
def load_urls(file_path):
    with open(file_path, 'r') as f:
        return [line.strip() for line in f.readlines()]

# Funkcja do ładowania proxy z pliku
def load_proxies(file_path):
    with open(file_path, 'r') as f:
        return [line.strip() for line in f.readlines()]

# Funkcja do wyboru nieużywanego proxy
def select_proxy(proxy_list, last_used_proxy):
    for proxy in proxy_list:
        if proxy != last_used_proxy:
            return proxy
    return proxy_list[0]

# Funkcja do sprawdzania URL-a z użyciem proxy
def check_url(url, proxy):
    try:
        response = requests.get(url, proxies={'http': proxy, 'https': proxy}, timeout=10)
        return response.status_code, response.url if response.history else None
    except requests.exceptions.RequestException as e:
        return None, None

# Funkcja do dodawania rekordu do bazy danych
def add_to_db(url, status_code, target_url=None):
    connection_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    c.execute('INSERT INTO responses (connection_date, url, response_code, target_url) VALUES (?, ?, ?, ?)',
              (connection_date, url, status_code, target_url))
    conn.commit()

# Funkcja obsługująca proces
def process_urls(urls, proxies):
    last_used_proxy = None
    timeout_count = 0
    total_urls = len(urls)
    start_time = time.time()

    for i, url in enumerate(urls):
        # Wybieramy nieużywane proxy
        proxy = select_proxy(proxies, last_used_proxy)
        last_used_proxy = proxy
        
        # Sprawdzamy URL
        status_code, target_url = check_url(url, proxy)

        # Logika dla błędów i timeout
        if status_code == 429 or status_code is None:
            timeout_count += 1
            if timeout_count >= 10:
                print(f'Wystąpiło 10 kolejnych błędów. Oczekiwanie 60 sekund.')
                time.sleep(60)
                timeout_count = 0
        else:
            timeout_count = 0

            # Dodanie wyniku do bazy danych
            if status_code and status_code != 429:
                if 300 <= status_code < 400 and target_url:
                    add_to_db(url, status_code, target_url)
                else:
                    add_to_db(url, status_code)

        # Obliczenia procentowe i czas
        elapsed_time = time.time() - start_time
        progress = (i + 1) / total_urls * 100
        print(f'Progres: {progress:.2f}%, URL: {url}, Proxy: {proxy}, Czas: {elapsed_time:.2f} sek')

# Główne wywołanie
urls = load_urls(url_file)
proxies = load_proxies(proxy_file)
process_urls(urls, proxies)

# Zamknięcie połączenia z bazą
conn.close()

Żeby była jasność – jest to w 100% wygenerowany przez ChatGPT skrypt. Nie polecam go używać, bo jest to jeszcze wstępna wersja! Mało tego, aby z niego skorzystać potrzebujesz kodu skryptu proxy. Poprosiłem AI aby proxy napisane zostało w PHP tak abym mógł dodać je na wielu zwykłych serwerach obsługujących Apache, LiteSpeed czy Nginx.

Oto prompt który napisałem:

Potrzebuję abyś przygotować kod PHP dla pliku proxy który umieszczę na kilku serwerach HTTP. Plik proxy będzie wykorzystywany przez skrypt Python do łączenia się ze wskazanymi w pliku urls.txt adresami.
Muszę skorzystać z proxy ponieważ strona z którą się łaczę posiada limitację 1 zautomatyzowanego odpytania z adresu IP na około 2 sekundy. Wykorzystam do tego celu około 5 różnych serwerów.
Potrzebuję aby serwer proxy pobrał tylko kod odpowiedzi strony lub inne zadane przeze mnie/przez skrypt python dane.

Nie jest to zbyt rozbudowane zapytanie, wiem. Potrzebowałem jednak wiedzieć jak mniej więcej kod pliku proxy miałby wyglądać. Oto jaki kod zaproponował chatGTP:

<?php
// Funkcja do wysyłania żądania HTTP do podanego URL
function fetch_url($target_url) {
    $ch = curl_init();
    
    // Ustawienie opcji cURL
    curl_setopt($ch, CURLOPT_URL, $target_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Odbieranie odpowiedzi jako string
    curl_setopt($ch, CURLOPT_HEADER, true);         // Pobieranie nagłówków odpowiedzi
    curl_setopt($ch, CURLOPT_NOBODY, true);         // Tylko nagłówki, bez ciała odpowiedzi
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);          // Timeout dla połączenia
    
    // Wykonanie żądania
    $response = curl_exec($ch);

    // Sprawdzenie, czy wystąpił błąd
    if(curl_errno($ch)) {
        return ['error' => 'Error: ' . curl_error($ch)];
    }

    // Pobranie kodu odpowiedzi HTTP
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    // Zamknięcie połączenia cURL
    curl_close($ch);

    // Zwracanie tylko kodu odpowiedzi HTTP
    return ['http_code' => $http_code];
}

// Sprawdzenie, czy URL został przekazany przez GET
if (isset($_GET['url'])) {
    $target_url = $_GET['url'];

    // Wywołanie funkcji pobierającej kod odpowiedzi
    $result = fetch_url($target_url);

    // Zwrócenie wyniku w formacie JSON
    header('Content-Type: application/json');
    echo json_encode($result);
} else {
    // Gdy nie podano URL, wyślij komunikat o błędzie
    echo json_encode(['error' => 'Brak URL. Podaj parametr ?url=']);
}
?>

Mając to wszystko, wprowadziłem kilka dodatkowych zmian oczywiście z pomocą ChatGPT. W efekcie otrzymałem działający skrypt który bez większego problemu jest w stanie przetworzyć dowolną ilość adresów i zapisać je do bazy SQL.

Poniżej znajdziesz adresy do pobrania skryptu z działającą obsługą proxy oraz bez obsługi proxy. W zdecydowanej większości, najlepiej sprawdzi się skrypt wykorzystujący proxy. Zalecam aby dodawać go na różne serwery (nie domeny!). Dzięki temu, będziesz mieć w puli więcej adresów IP i znacząco przyspieszysz czas pobierania danych. Dodatkowo, zwróć uwagę na linijkę odpowiedzialną za opóźnienie zapytania. Domyślnie jest tam 1 sekundowa przerwa. Zmiana na pół sekundy lub nawet na 1/10 sekundy powinno pomóc. Możesz też oczywiście totalnie usunąć funkcję odpowiedzialną za opóźnienie odpytywania adresów. Może to jednak sprawić, że wykonasz DDoS własnej strony internetowej!

DDoS (Distributed Denial of Service) to rodzaj cyberataku, w którym wiele zainfekowanych urządzeń jednocześnie wysyła ogromną ilość żądań do jednego serwera lub strony internetowej. Celem jest przeciążenie systemu, co prowadzi do jego spowolnienia lub całkowitego zablokowania, przez co usługi stają się niedostępne dla prawdziwych użytkowników.

Jak uruchomić skrypt w Python na własnym urządzeniu?

Po pierwsze potrzebujesz zainstalować Python na swojej maszynie. Jest to banalnie proste!

Jak zainstalować Python na Windows, macOS i Linux oraz jak zacząć z niego korzystać:


Instalacja Pythona na Windows:

Krok 1: Pobranie Pythona

  • Wejdź na oficjalną stronę Pythona: python.org
  • Kliknij przycisk Download Python. Strona powinna automatycznie zasugerować odpowiednią wersję dla twojego systemu operacyjnego.

Krok 2: Instalacja

  • Otwórz pobrany plik instalacyjny .exe.
  • Zaznacz opcję Add Python to PATH (jest to bardzo ważne).
  • Kliknij Install Now i postępuj zgodnie z instrukcjami instalatora.

Krok 3: Sprawdzenie instalacji

  • Otwórz wiersz poleceń (cmd):
  • Naciśnij Win + R, wpisz cmd i naciśnij Enter.
  • Wpisz komendę: python --version
  • Jeśli zobaczysz numer wersji Pythona, instalacja zakończyła się pomyślnie.

Instalacja Pythona na macOS:

Krok 1: Sprawdzenie zainstalowanego Pythona

  • macOS często ma zainstalowaną starszą wersję Pythona.
  • Otwórz Terminal (Cmd + Spacja, wpisz „Terminal”, naciśnij Enter) i wpisz: python3 --version
  • Jeśli Python 3 nie jest zainstalowany, przejdź do kroku 2.

Krok 2: Instalacja Homebrew (opcjonalne, jeśli nie masz)

  • Homebrew to popularny menedżer pakietów dla macOS.
  • W terminalu wpisz:
  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • Po instalacji Homebrew wpisz: brew install python

Krok 3: Sprawdzenie instalacji

  • W terminalu wpisz: python3 --version
  • Powinieneś zobaczyć numer wersji Pythona 3.

Instalacja Pythona na Linux (Debian, Ubuntu):

Krok 1: Sprawdzenie zainstalowanej wersji Pythona

  • Otwórz terminal (Ctrl + Alt + T) i wpisz:
  python3 --version
  • Większość dystrybucji Linuxa ma już zainstalowanego Pythona 3.

Krok 2: Instalacja Pythona (jeśli go nie ma lub chcesz zaktualizować)

  • Użyj menedżera pakietów do instalacji Pythona:
  sudo apt update
  sudo apt install python3

Krok 3: Sprawdzenie instalacji

  • W terminalu wpisz: python3 --version – powinieneś zobaczyć wersję Pythona 3.

Jak zacząć korzystać z Pythona:

Krok 1: Uruchomienie interpretera Pythona

  • Na Windows, otwórz wiersz poleceń (cmd), na macOS i Linux otwórz terminal, a następnie wpisz:
  python (na Windows)
  python3 (na macOS i Linux)

Krok 2: Uruchamianie skryptów Pythona

  • Stwórz plik o nazwie np. script.py z prostym kodem:
  print("Hello, world!")
  • W terminalu przejdź do folderu z plikiem i uruchom:
  python script.py  # Windows
  python3 script.py  # macOS/Linux

Teraz możesz zacząć pisać i uruchamiać swoje skrypty w Pythonie!

Tworzenie i uruchamianie skryptów Python

1. Tworzenie skryptu Python

Skrypt Python to plik tekstowy z rozszerzeniem .py, który zawiera kod w języku Python. Skrypty można tworzyć w dowolnym edytorze tekstu.

Krok 1: Wybór lokalizacji na plik

  • Możesz umieścić plik z rozszerzeniem .py w dowolnym folderze na twoim komputerze.
  • Aby ułatwić zarządzanie projektami, stwórz specjalny folder na swoje skrypty, np.:
  • Windows: C:\MojeSkrypty
  • macOS/Linux: /Users/nazwa_użytkownika/MojeSkrypty

Krok 2: Tworzenie pliku

  • Otwórz edytor tekstowy (lista poniżej).
  • W nowym pliku wpisz prosty kod, np.:
  print("Hello, world!")
  • Zapisz plik z rozszerzeniem .py, np. jako hello.py w wybranym folderze.

2. Uruchamianie skryptu Python

Aby uruchomić skrypt, musisz go wywołać w terminalu lub wierszu poleceń.

Krok 1: Otwórz terminal lub wiersz poleceń

  • Windows: Naciśnij Win + R, wpisz cmd i naciśnij Enter.
  • macOS/Linux: Otwórz terminal (Cmd + Spacja, wpisz „Terminal”).

Krok 2: Przejdź do lokalizacji pliku

W terminalu/w CMD wpisz komendę, aby przejść do folderu, gdzie zapisany jest twój skrypt:

  • Windows:
  cd C:\MojeSkrypty
  • macOS/Linux:
  cd ~/MojeSkrypty

Krok 3: Uruchom skrypt

  • W terminalu wpisz:
  • Windows: python hello.py
  • macOS/Linux: python3 hello.py
  • Jeśli wszystko działa poprawnie, zobaczysz w terminalu komunikat: Hello, world!

3. Wybór edytora tekstu

Do pisania skryptów Python możesz używać różnych edytorów, od prostych po zaawansowane IDE. Według mnie najlepiej sprawdzi się:

Visual Studio Code (VS Code):

Darmowy, bardzo popularny edytor z obsługą rozszerzeń, w tym wsparciem dla Pythona.
Instalacja: VS Code
Aby ułatwić pisanie kodu w Pythonie, zainstaluj rozszerzenie Python dostępne w Marketplace.

Jak użyć mojego skryptu do analizy adresów?

Instrukcja jest bardzo prosta. Po pierwsze, pobierz gotową paczkę plików w zależności czy chcesz korzystać z wersji obsługującej proxy czy też nie. Jeżeli masz większą stronę lub wiele stron do sprawdzenia, skorzystanie z proxy będzie pomocne. Dla mniejszych witryn opcja bez proxy będzie wystarczająca.

Pobierz interesującą Cię paczkę. W zależności od wersji znajdziesz 4 lub 2 pliki:

  • urls.txt – obie wersje
  • proxies.txt – tylko wersja proxy
  • statusCheck.py – obie wersje
  • proxy.php – tylko wersja proxy

W pliku urls.txt umieść wszystkie adresy które chcesz zbadać. Każdy adres umieć w osobnej linijce. Może ich być 100, 1000 a nawet 50000. Im więcej będzie adresów tym czas wykonywania skryptu będzie dłuższy!

W pliku proxies.txt umieść adresu URL gdzie znajduje się poprawnie umieszczony plik proxy.php. Może być tych adresów 1, 2 a może ich być 100. Zadbaj o to, aby proxy umieszczone było na jednym IP tylko raz.

Plik statusCheck.py to serce całej aplikacji. To ten plik wywołasz finalnie w konsoli i to on będzie przetwarzał dane. Możesz dowolnie zmieniać nazwę tego pliku. Umieść go gdzieś na swoim komputerze. Pamiętaj także aby przed jego uruchomieniem posiadać zainstalowane środowisko Python! Dodatkowo, będziesz musiał zainstalować jeszcze taki moduł jak requests. Instrukcja jak to zrobić, poniżej.

Na koniec mamy plik proxy.php. Umieść go na serwerze pod adresem domena.pl/proxy.php. Następnie odwiedź adres w którym znajduje się dany plik i jeżeli zobacz komunikat podobny do tego:

{"error":"Brak URL. Podaj parametr ?url="}

To znak, że adres pliku jest poprawny i można śmiało dodawać go do pliku proxies.txt. Pamiętaj, że proxy możesz umieścić także na swojej maszynie! Musisz mieć jednak uruchomiony jakiś serwer HTTP na przykład z wykorzystaniem XAMPP.

Uruchamianie skryptu do analizy adresów

  1. Zainstaluj wymagane pakiety

Skrypt wymaga modułów requests oraz sqlite3. sqlite3 jest standardową biblioteką w Pythonie, ale requests trzeba zainstalować. Zrób to, wpisując w terminalu:

pip install requests

2. Przygotuj plik z URL-ami (urls.txt)

Skrypt ładuje URL-e z pliku tekstowego urls.txt. Utwórz ten plik w tym samym folderze co skrypt i wprowadź w nim URL-e, które chcesz sprawdzić, po jednym na każdą linię:

https://domena.pl/kategoria/
https://domena.pl/kategoria/podstrona1
https://domena.pl/kategoria/podstrona2
https://domena.pl/blog/wpis-na-blogu

3. Umieść plik proxy.php na serwerach które będą Twoim proxy

4. Adresy proxy umieść w pliku proxies.txt

5. Uruchom terminal (PowerShell, Terminal) a następnie sam skrypt poprzez komendę:

python statusCheck.py

lub dla MacOS/Linux

python3 statusCheck.py

5. Poczekaj aż skrypt wykona się. Nie wyłączaj komputera i nie wyłączaj terminala.

6. Wynik pracy skryptu

W folderze w którym uruchomiłeś skrypt utworzy się kolejny plik: responses.db który będzie Twoją bazą SQL z pobranymi wynikami. Dane z tej tabeli możesz zaimportować do arkuszy Google, możesz przygotować sobie skrypt który przedstawi Ci te dane w postaci tabeli HTML lub wyświetlić je w dowolny inny sposób.

Dane w tabeli będą wyglądać mniej więcej tak:

idconnection_dateurlresponse_codetarget_url
2012024-10-17 11:10:28https://ciach-adres.html404NULL
2022024-10-17 11:10:29https://ciach-adres.html404NULL
2032024-10-17 11:10:29https://ciach-adres.html404NULL
2042024-10-17 11:10:30https://ciach-adreshtml404NULL
2052024-10-17 11:10:31https://ciach-adres.html404NULL
2062024-10-17 11:10:31https://ciach-adres.html404NULL
2072024-10-17 11:10:32https://ciach-adres.html404NULL
2082024-10-17 11:10:33https://ciach-adres.html404NULL
2092024-10-17 11:10:34https://ciach-adres.html200NULL
2102024-10-17 11:10:34https://ciach-adres.html200NULL
2112024-10-17 11:10:35https://ciach-adres.html200NULL

Tak zebrane dane możesz wykorzystać dowolnie – wyeksportować je do pliku CSV a następnie umieścić w arkuszu Google, załadować do swojej aplikacji lub przygotować widok HTML który wyświetli Ci piękną tabelę. Niezależnie co będziesz potrzebował, możesz skorzystać z ChatGPT aby wygenerował Ci odpowiednie rozwiązanie.

Co jeszcze mogę osiągnąć wykorzystując Python oraz ChatGPT?

W zasadzie co chcesz, jak to w przypadku programowania. Ja np. napisałem sobie proste narzędzie do pobierania wybranych danych ze wskazanych stron internetowych. Dzięki temu, uzyskałem wiele cennych danych tabelarycznych które pozwoliły mi utworzyć stronę internetową z unikalną treścią.

Można też stworzyć sobie prosty crawler strony i pobierać informacje o dowolnej witrynie. Możesz śledzić zmiany na stronie, badać cyklicznie jej status, łączyć się z róznymi API i wiele wiele więcej. Wszystko zależy tak naprawdę jakie masz potrzeby, możliwości i jak daleko sięga Twoje zrozumienie działania technologii i programowania.

Ostatnio, praktycznie bez mojego udziału wygenerował się plik htacess z wymaganymi przekierowaniami 301 w sklepie internetowym! Ja podałem tylko adresy z mapy strony oraz nowe adresy ze strony w wersji produkcyjnej, dodałem odpowiednie wzorce których należało się trzymać i miałem w mgnieniu oka gotowy, działający plik htaccess! Zamiast ręcznie dopasowywać każdy z adresów, stworzyłem sobie narzędzie które zrobiło za mnie 95% pracy. Mnie zostało tylko zweryfikowanie oraz sprawdzenie poprawności pliku.

Na koniec: nie bój się testować! Czasem wielkie rzeczy mogą zająć dosłownie kilka linijek kodu i pozwolić Ci zaoszczędzić mnóstwo czasu!

Dołącz do subkrybentów

Już wkrótce o nowościach najpierw dowiedzą się subskrybenci, a potem reszta! 🙂 A może prześlę skrypt na eksportowanie danych z bazy danych do CSV? Kto wie, kto wie!