Jak uzyskać tekst strony za pomocą wget bez HTML?

17

Jeśli spróbuję wget na stronie internetowej, otrzymam stronę w formacie HTML. Czy można pobrać tylko tekst pliku bez powiązanego HTML? (Jest to dla mnie wymagane, ponieważ niektóre strony HTML zawierają c program jest pobierany z tagami HTML. Muszę go otworzyć w przeglądarce i ręcznie skopiować tekst, aby utworzyć plik .c.)

Grzyby Księżycowe
źródło
1
W rzeczywistości jest to możliwe, ale musisz napisać funkcję, która przeanalizuje kod ze strony i zapisze go jako .c. To nie jest trudne, ale zależy od struktury strony. Jeśli podasz link, być może ktoś pomoże ci z dokładnym kodem. W przeciwnym razie sedlub perlsą twoimi przyjaciółmi.
pędzi

Odpowiedzi:

26

wgetpobierze tylko dokument. Jeśli dokument jest w formacie HTML, to czego potrzebujesz, to wynik jego parsowania.

Możesz na przykład użyć lynx -dump -nolist, jeśli masz w pobliżu rysia.

lynxjest lekką, prostą przeglądarką internetową, która ma tę -dumpfunkcję, wykorzystywaną do generowania wyniku procesu parsowania. -nolistunika listy linków na końcu, która pojawi się, jeśli strona zawiera hiperłącza.

Jak wspomniano @Thor, elinksmożna do tego również użyć, ponieważ ma również -dumpopcję (i musi -no-referencespominąć listę linków). Może to być szczególnie przydatne, gdy przechodzisz przez jakąś stronę za pomocą -sigh- frames (MTFBWY).

Pamiętaj też, że jeśli strona nie jest tak naprawdę tylko kodem C z tagami HTML, musisz sprawdzić wynik, aby upewnić się, że nie ma tam nic więcej niż kod C.

njsg
źródło
5

Jeśli nie masz zainstalowanych tych innych narzędzi, tylko wget, a strona nie ma formatowania, tylko zwykły tekst i linki, np. Kod źródłowy lub lista plików, możesz rozebrać HTML przy pomocy sed:

wget -qO- http://address/of/page/you/want/to/view/ | sed -e 's/<[^>]*>//g'

Używa wget, aby zrzucić źródło strony do STDOUT i sed, aby usunąć dowolne pary <> i cokolwiek między nimi.

Następnie możesz przekierować dane wyjściowe polecenia sed do pliku, który chcesz utworzyć, używając>:

wget -qO- http://.../ | sed -e 's/<[^>]*>//g' > downloaded_file.txt

Uwaga: może się okazać, że w pliku nie ma dodatkowych spacji, których nie chcesz (np. Linie są wcięte w kilku kolumnach)

Najłatwiej może być użyć edytora tekstu, aby uporządkować ten plik (lub formatyzator źródłowy podczas pobierania kodu źródłowego w języku C).

Jeśli potrzebujesz zrobić tę samą prostą rzecz w każdym wierszu pliku, możesz dołączyć polecenie, aby to zrobić w poleceniu sed (tutaj usuwając jedną spację wiodącą):

wget -qO- http://.../ | sed -e 's/<[^>]*>//g;s/^ //g' > downloaded_stripped_file.txt
JohnGH
źródło
3

aby dodać kolejne narzędzie. Wolę w3m, która jest lynxjak przeglądarka konsoli. Możesz sprawdzić, co jest już dostępne w twoim systemie.

w3m -dump website.html
McPeppr
źródło