Pobieram stronę źródłową HTML witryny za pomocą cURL
polecenia. Problem polega na tym, że nie chcę większości treści na stronie. Potrzebuję tylko pierwszych 100 wierszy strony źródłowej. Czy istnieje sposób, aby zatrzymać pobieranie strony po kilku pierwszych wierszach?
Obecnie mam poniższe polecenie działające, ale nie wydaje się to skuteczne czasowo.
curl -r[0-1] "http://www.freebase.com/m/045c7b" > foo.txt
Próbowałem zmianę wartości od 1
do .5
i .05
i jeszcze cała strona internetowa jest coraz pobrane.
Patrzę na czas krótszy niż sekunda na wykonanie powyższego polecenia.
EDYTOWAĆ
Ze strony podręcznika cURL
widzę, że „ powinieneś również pamiętać, że wiele serwerów HTTP / 1.1 nie ma włączonej tej funkcji, więc gdy spróbujesz uzyskać zakres, zamiast tego otrzymasz cały dokument. ” Więc jeśli serwer nie obsługuje zapytań o zakres, czy jest jakieś inne polecenie w nix
środowisku, które pomoże mi osiągnąć to, co próbuję zrobić?
Nie przetestowałem jeszcze tej konkretnej aplikacji, ale coś mi mówi, że możesz sparować dd i nc tutaj:
Netcat (
nc
) może wymagać dalszej konfiguracji, aby uzyskać prawidłowe nagłówki żądań, ale jeśli jest to witryna publiczna, powinieneś być w stanie sfinalizować przydatne wyjście, jeśli zależy ci na tym, aby spróbować. Z pewnością dd pobierze tylko tyle danych, ile podasz i opuścisz, co spowoduje SIGPIPE netcat, aby natychmiast podążył za nim. Jedyną prawdziwą sztuczką jest ułożenie początkowego uścisku dłoni - po uruchomieniu strumienia możesz go upuścić w dowolnym momencie.EDYTOWAĆ
Czytanie komentarzy SLM skłoniło mnie do poparcia tego ruchu; jeśli możesz serializować JSON POST we właściwym formacie, to zdecydowanie sposób na uzyskanie bardziej terminowej odpowiedzi. W każdym razie parsowanie HTML jest dla ptaków.
Jedną z przydatnych sztuczek w tym celu jest przechwytywanie strumienia sieciowego podczas komunikacji z serwerem w przeglądarce, a następnie, gdy przeglądarka wysyła test POST, który dostaje to, co chcesz, wysłać go ponownie jako GET i rzuć okiem na wyniki.
źródło
head
Komenda zazwyczaj zatrzymać pobieranie zanim to się skończy (choć dla krótkich plików może wypełnić bufor rury przed rura jest zamknięta). Wynika to z faktu, że gdy potok jest zamknięty,curl
nie ma gdzie pisać (deskryptor pliku jest zamknięty, zapis nie powiedzie się).Z mojego doświadczenia wynika jednak, że najdłuższą rzeczą podczas pobierania jest oczekiwanie na żądania DNS (bolesne, gdy pobierasz setki plików sekwencyjnie). Można temu zaradzić w lokalnej pamięci podręcznej DNS, takiej jak
dnsmasq
lub, jeśli używasz tej samej nazwy domeny wiele razy z inną strukturą katalogów, po prostu zamień ją na adres IP i wykonaj zamianę adresu URL.Aby udowodnić, o co mi chodzi ... spróbuj
time netstat
kontratime netstat -n
(bez pamięci podręcznej różnica jest dramatyczna, z pamięcią podręczną jest tylko zła za pierwszym razem, a potem pamięta).źródło