Python Web Scraping - strony internetowe oparte na formularzach
W poprzednim rozdziale widzieliśmy skrobanie dynamicznych witryn internetowych. W tym rozdziale przyjrzyjmy się skrobaniu witryn internetowych, które działają na podstawie danych wejściowych użytkownika, czyli witryn internetowych opartych na formularzach.
Wprowadzenie
Obecnie WWW (World Wide Web) zmierza w kierunku mediów społecznościowych, a także treści generowanych przez użytkowników. Powstaje więc pytanie, w jaki sposób możemy uzyskać dostęp do takich informacji, które są poza ekranem logowania? W tym celu musimy zająć się formularzami i loginami.
W poprzednich rozdziałach pracowaliśmy z metodą HTTP GET w celu żądania informacji, ale w tym rozdziale będziemy pracować z metodą HTTP POST, która wypycha informacje na serwer WWW w celu ich przechowywania i analizy.
Interakcja z formularzami logowania
Podczas pracy w Internecie musiałeś wielokrotnie wchodzić w interakcję z formularzami logowania. Mogą być bardzo proste, na przykład zawierające tylko kilka pól HTML, przycisk przesyłania i stronę akcji, lub mogą być skomplikowane i mieć dodatkowe pola, takie jak e-mail, zostaw wiadomość wraz z captcha ze względów bezpieczeństwa.
W tej sekcji zajmiemy się prostym formularzem przesyłania za pomocą biblioteki żądań Pythona.
Najpierw musimy zaimportować bibliotekę żądań w następujący sposób -
import requests
Teraz musimy podać informacje w polach formularza logowania.
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
W kolejnym wierszu kodu musimy podać adres URL, na którym miałaby nastąpić akcja formularza.
r = requests.post(“enter the URL”, data = parameters)
print(r.text)
Po uruchomieniu skryptu zwróci zawartość strony, na której nastąpiło działanie.
Załóżmy, że jeśli chcesz przesłać dowolny obraz za pomocą formularza, to jest to bardzo łatwe dzięki request.post (). Możesz to zrozumieć za pomocą następującego skryptu Python -
import requests
file = {‘Uploadfile’: open(’C:\Usres\desktop\123.png’,‘rb’)}
r = requests.post(“enter the URL”, files = file)
print(r.text)
Ładowanie plików cookie z serwera internetowego
Plik cookie, czasami nazywany plikiem cookie sieciowym lub cookie internetowym, to niewielka część danych wysyłana ze strony internetowej, a nasz komputer przechowuje ją w pliku znajdującym się w naszej przeglądarce internetowej.
W kontekście obsługi formularzy logowania pliki cookie mogą być dwojakiego rodzaju. Po pierwsze, omówiliśmy w poprzedniej sekcji, która umożliwia nam przekazywanie informacji do witryny internetowej, a po drugie pozwala nam pozostać w stałym stanie „zalogowania” przez cały czas naszej wizyty na stronie. W przypadku drugiego rodzaju formularzy strony internetowe używają plików cookie, aby śledzić, kto jest zalogowany, a kto nie.
Co robią pliki cookie?
Obecnie większość witryn używa plików cookie do śledzenia. Możemy zrozumieć działanie plików cookie za pomocą następujących kroków -
Step 1- Najpierw witryna uwierzytelni nasze dane logowania i zapisze je w pliku cookie naszej przeglądarki. Ten plik cookie zawiera generowane przez serwer informacje o toke, time-out i śledzeniu.
Step 2- Następnie witryna wykorzysta plik cookie jako dowód uwierzytelnienia. To uwierzytelnienie jest zawsze pokazywane za każdym razem, gdy odwiedzamy witrynę.
Pliki cookie są bardzo problematyczne dla skrobaków internetowych, ponieważ jeśli skrobaki internetowe nie śledzą plików cookie, przesłany formularz jest odsyłany, a na następnej stronie wydaje się, że nigdy się nie zalogowali. Bardzo łatwo jest śledzić pliki cookie za pomocą Pyton requests biblioteka, jak pokazano poniżej -
import requests
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = requests.post(“enter the URL”, data = parameters)
W powyższym wierszu kodu adres URL będzie stroną, która będzie działać jako procesor dla formularza logowania.
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
Po uruchomieniu powyższego skryptu pobierzemy pliki cookie z wyniku ostatniego żądania.
Istnieje inny problem z plikami cookie, że czasami witryny internetowe często modyfikują pliki cookie bez ostrzeżenia. Z taką sytuacją można sobie poradzićrequests.Session() w następujący sposób -
import requests
session = requests.Session()
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = session.post(“enter the URL”, data = parameters)
W powyższym wierszu kodu adres URL będzie stroną, która będzie działać jako procesor dla formularza logowania.
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
Zwróć uwagę, że możesz łatwo zrozumieć różnicę między skryptem z sesją a bez sesji.
Automatyzacja formularzy w Pythonie
W tej sekcji zajmiemy się modułem Pythona o nazwie Mechanize, który ograniczy naszą pracę i zautomatyzuje proces wypełniania formularzy.
Moduł zmechanizowany
Moduł Mechanize zapewnia nam interfejs wysokiego poziomu do interakcji z formularzami. Przed rozpoczęciem korzystania z niego musimy zainstalować go za pomocą następującego polecenia -
pip install mechanize
Zauważ, że działałoby to tylko w Pythonie 2.x.
Przykład
W tym przykładzie zautomatyzujemy proces wypełniania formularza logowania zawierającego dwa pola, a mianowicie adres e-mail i hasło -
import mechanize
brwsr = mechanize.Browser()
brwsr.open(Enter the URL of login)
brwsr.select_form(nr = 0)
brwsr['email'] = ‘Enter email’
brwsr['password'] = ‘Enter password’
response = brwsr.submit()
brwsr.submit()
Powyższy kod jest bardzo łatwy do zrozumienia. Najpierw zaimportowaliśmy moduł mechanize. Następnie utworzono obiekt przeglądarki Mechanize. Następnie przeszliśmy do adresu URL logowania i wybraliśmy formularz. Następnie nazwy i wartości są przekazywane bezpośrednio do obiektu przeglądarki.