Za pomocą przeglądarki internetowej (IE lub Chrome) mogę zapisać stronę internetową (.html) za pomocą Ctl-S, sprawdzić ją w dowolnym edytorze tekstu i zobaczyć dane w formacie tabeli. Jedna z tych liczb, które chcę wyodrębnić, ale dla wielu, wielu stron internetowych, zbyt wiele do zrobienia ręcznie. Więc chciałbym użyć WGET, aby pobierać te strony jedna po drugiej, i napisać inny program do parsowania pliku .html i pobrania żądanej liczby. Ale plik .html zapisany przez WGET przy użyciu tego samego adresu URL co przeglądarka nie zawiera tabeli danych. Dlaczego nie? To tak, jakby serwer wykrył, że żądanie pochodzi od WGET, a nie z przeglądarki internetowej, i dostarcza szkieletową stronę internetową bez tabeli danych. Jak mogę uzyskać dokładnie tę samą stronę internetową za pomocą WGET? - Dzięki!
WIĘCEJ INFORMACJI:
Przykład adresu URL, który próbuję pobrać, to: http://performance.morningstar.com/fund/performance-return.action?t=ICENX®ion=usa&culture=en-US, gdzie ciąg ICENX jest symbolem giełdowym funduszu inwestycyjnego , które zmienię na dowolny z wielu różnych symboli giełdowych. Spowoduje to pobranie tabeli danych podczas przeglądania w przeglądarce, ale tabeli danych brakuje, jeśli jest pobierana za pomocą WGET.
Odpowiedzi:
Tak jak zauważył roadmr , tabela na tej stronie jest generowana przez javascript. wget nie obsługuje javascript, po prostu zrzuca stronę otrzymaną z serwera (tj. przed uruchomieniem jakiegokolwiek kodu javascript), więc brakuje tabeli.
Potrzebujesz przeglądarki bezgłowej, która obsługuje javascript jak phantomjs :
za pomocą save_page.js:
Następnie, jeśli chcesz tylko wyodrębnić trochę tekstu, najłatwiej może być renderowanie strony za pomocą w3m:
i / lub zmodyfikuj skrypt phantomjs, aby po prostu zrzucić to, co Cię interesuje.
źródło
Możesz pobrać pełną witrynę za pomocą
wget --mirror
Przykład:
Powyższy wiersz poleceń, który chcesz wykonać, gdy chcesz pobrać pełną stronę internetową i udostępnić do lokalnego przeglądania.
Opcje:
--mirror
włącza opcje odpowiednie dla kopii lustrzanej.-p
pobiera wszystkie pliki niezbędne do prawidłowego wyświetlenia danej strony HTML.--convert-links
po pobraniu przekonwertuj łącza w dokumencie do lokalnego przeglądania.-P ./LOCAL-DIR
zapisuje wszystkie pliki i katalogi w określonym katalogu.Więcej informacji o opcjach Wget Przeczytaj więcej w tym artykule: Omówienie wszystkich poleceń Wget z przykładami lub sprawdź stronę podręcznika Wget .
źródło
Zamiast tego
--recursive
, co będzie po prostu „pająk”, użyj każdego linku w twoim adresie URL--page-requisites
. Powinien zachowywać się dokładnie tak, jak opcje opisane w przeglądarkach graficznych.Aby uzyskać więcej informacji, zrób
man wget
i poszukaj--page-requisites
opcji (użyj „/”, aby wyszukać podczas czytania strony podręcznika ).źródło
Jeśli odpowiedź serwera różni się w zależności od źródła pytającego, dzieje się tak głównie ze względu na zmienną HTTP_USER_AGENT (tylko ciąg tekstowy), która jest dostarczana z żądaniem ze źródła pytającego, informującego serwer o technologii.
Możesz sprawdzić swojego agenta przeglądarki tutaj -> http://whatsmyuseragent.com
Zgodnie z instrukcją WGET ten parametr powinien wykonać zadanie
--user-agent=AGENT
.Jeśli to nie pomoże, tj. Przetwarzanie JavaScript może być konieczne, aby uzyskać tę samą stronę co przeglądarka, lub może odpowiednie żądanie z parametrami GET, aby serwer przygotował odpowiedź, która nie wymaga JavaScript do wypełnienia strony.
źródło