2015-07-13 20 views
5

Czy istnieje sposób na efektywną integrację Selenium w Scrapy w zakresie możliwości generowania strony (w celu generowania zrzutów ekranu)?Integracja Selenium ze Skrobią

Wiele rozwiązań, które widziałem, po prostu prześlij adres żądania/odpowiedzi Scrapy na WebDriver po Scrapy już przetworzył żądanie, a następnie po prostu działa. Tworzy to dwa razy więcej żądań, kończy się niepowodzeniem na wiele sposobów (strony wymagające logowania, witryn z dynamiczną lub pseudolosową treścią itp.) I unieważnia wiele rozszerzeń/oprogramowania pośredniego.

Czy istnieje "dobry" sposób na doprowadzenie do współpracy dwóch osób? Czy istnieje lepszy sposób generowania zrzutów ekranu z zeskanowanej zawartości?

Odpowiedz

3

Użyj funkcji Scrapy's Downloader Middleware. Zobacz moją odpowiedź na inne pytanie na prosty przykład: https://stackoverflow.com/a/31186730/639806

+0

Sprawdziłem, i choć rozwiązuje on jeden z problemów (podwojenie liczby zapytań), pomija wiele funkcji, które zapewnia Scrapy. Odrzuca konfigurację agenta użytkownika, konfiguracje proxy, nagłówki i oferuje zerową trwałość między wywołaniami (bez sesji/plików cookie). Co więcej, niemożliwe jest składanie wniosków o POST w Selenium, więc rzeczy takie jak FormRequests ulegną zerwaniu lub będą miały bardzo nieoczekiwane wyniki. – Rejected

+0

Pomija te rzeczy. Jest to bardzo prosty przykład, ale wiele z tych rzeczy może być duplikowanych w Selenie (takich jak pliki cookie, nagłówki i ciąg znaków użytkownika). W rzeczywistości większość tych informacji można wyciągnąć, używając informacji o żądaniu, które są dostępne jako argumenty w metodzie "process_request". Ponadto, nie będziesz musiał POST przez Selenium. Nie ma powodu, dla którego nie można tego zrobić poprzez Scrapy w "analizie" po pobraniu odpowiedzi Selenium. – JoeLinux

+0

Czy formularz FormRequest nie zostałby "przejęty" przez oprogramowanie pośrednie Selenium Downloader podczas jego przechodzenia, a następnie przetworzony jako driver.get (url) "przez Selenium? Jak można temu zapobiec? – Rejected