Jak pobrać zawartość strony internetowej w zmiennej powłoki?

115

W Linuksie jak mogę pobrać adres URL i pobrać jego zawartość w zmiennej w skrypcie powłoki?

Aillyn
źródło

Odpowiedzi:

189

Możesz użyć wgetpolecenia, aby pobrać stronę i wczytać ją do zmiennej jako:

content=$(wget google.com -q -O -)
echo $content

Korzystamy z -Oopcji, wgetktóra pozwala nam określić nazwę pliku, do którego wgetzrzuca zawartość strony. Określamy, -aby zrzut na standardowe wyjście i zbieraliśmy go do zmiennej content. Możesz dodać -qopcję cichą, aby wyłączyć wyjście wget.

Możesz użyć do tego polecenia curl, a także:

content=$(curl -L google.com)
echo $content

Musimy skorzystać z tej -Lopcji, ponieważ żądana przez nas strona mogła zostać przeniesiona. W takim przypadku musimy pobrać stronę z nowej lokalizacji. -LLub --locationopcja pomaga nam z tym.

codaddict
źródło
To naprawdę fajna sztuczka. Wywołuję skrypt powłoki za pośrednictwem skryptu php na serwerze proxy. Na pytanie, serwer proxy włącza drogie serwery, które wyłączają się po 2 godzinach. Potrzebuję danych wyjściowych z wget na standardowe wyjście, aby przekazać je z powrotem do rekordu konsoli Jenkinsa.
Dennis,
jeszcze tego nie rozumiem ... czy ktoś może zademonstrować, jak, np. pobierz tag img w zmiennej dla tego linku www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108
@ juggernaut1996: to powinno być osobne pytanie. Krótko mówiąc, musisz pobrać stronę, wyodrębnić srcatrybut odpowiedniego elementu, a następnie pobrać stronę. Jeśli zainstalujesz tq , to polecenie powinno to zrobić:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pyrocrasty
Wersja Wget 1.14 nie akceptuje opcji convert_links = onz -O-opcją. To kończy się błędem -k can be used together with -O only if outputting to a regular file.. Czy jest to oczekiwane?
Prasad Bonthu
28

Istnieje wiele sposobów na pobranie strony z wiersza poleceń ... ale zależy to również od tego, czy chcesz uzyskać źródło kodu, czy samą stronę:

Jeśli potrzebujesz źródła kodu:

z lokami:

curl $url

z wget:

wget -O - $url

ale jeśli chcesz uzyskać to, co widzisz za pomocą przeglądarki, lynx może się przydać:

lynx -dump $url

Myślę, że możesz znaleźć tak wiele rozwiązań tego małego problemu, może powinieneś przeczytać wszystkie strony podręcznika dla tych poleceń. I nie zapomnij zastąpić $urladresem URL :)

Powodzenia :)

julianvdb
źródło
3
content=`wget -O - $url`
Jim Lewis
źródło
@rjack: (Ale artykuł, do którego utworzyłeś link, jest całkiem niezłym argumentem za składnią $ (...).)
Jim Lewis
3

Jeśli masz zainstalowany LWP , udostępnia plik binarny o nazwie po prostu „ GET ”.

$ GET http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN">
<HTML>
<HEAD>
  <META http-equiv = "Content-Type" content = "text / html; charset = utf-8">
  <TITLE> Przykładowa strona internetowa </TITLE>
</HEAD> 
<body>  
<p> Ta strona internetowa jest dostępna po wpisaniu adresu „example.com”,
„example.net”, „example.org”
  lub „example.edu” do przeglądarki internetowej. </p>
<p> Te nazwy domen są zarezerwowane do użytku w dokumentacji i nie są dostępne 
  Do rejestracji. Zobacz <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, sekcja 3. </p>
</BODY>
</HTML>

wget -O-, curli lynx -sourcezachowuj się podobnie.

ephemient
źródło
2

Możesz użyć curllub, wgetaby pobrać surowe dane, lub możesz użyć, w3m -dumpaby uzyskać ładną tekstową reprezentację strony internetowej.

$ foo=$(w3m -dump http://www.example.com/); echo $foo
You have reached this web page by typing "example.com", "example.net","example.org" or "example.edu" into your web browser. These domain names are reserved for use in documentation and are not available for registration. See RFC 2606, Section 3.
Giacomo
źródło