Bagaimana cara mendapatkan konten halaman web dalam variabel shell?


115

Di Linux bagaimana saya bisa mengambil URL dan mendapatkan isinya dalam variabel di skrip shell?

Jawaban:


189

Anda dapat menggunakan wgetperintah untuk mengunduh halaman dan membacanya menjadi variabel sebagai:

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

Kami menggunakan -Oopsi wgetyang memungkinkan kami menentukan nama file yang akan wgetmembuang konten halaman. Kami menentukan -untuk mendapatkan dump ke output standar dan mengumpulkannya ke dalam variabel content. Anda dapat menambahkan -qopsi diam untuk mematikan output wget.

Anda dapat menggunakan perintah curl untuk ini juga:

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

Kita perlu menggunakan -Lopsi ini karena halaman yang kita minta mungkin telah dipindahkan. Dalam hal ini kita perlu mendapatkan halaman dari lokasi baru. The -Latau --locationopsi membantu kami dengan ini.


Ini adalah trik yang sangat bagus. Saya menjalankan skrip shell melalui skrip php di server proxy. Saat ditanya, server proxy mengaktifkan server mahal yang mati sendiri setelah 2 jam. Saya membutuhkan keluaran dari wget untuk keluaran standar untuk memberi umpan balik ke catatan konsol Jenkins.
Dennis

saya belum mendapatkan ini ... adakah yang bisa menunjukkan pendapatnya tentang bagaimana, misalnya. dapatkan tag img dalam variabel untuk tautan ini www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108

@ juggernaut1996: itu seharusnya menjadi pertanyaan terpisah. Secara singkat, Anda harus men-download halaman, ekstrak srcatribut dari elemen yang benar, kemudian download yang halaman. Jika Anda menginstal tq , perintah ini harus melakukannya:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pyrocrasty

Wget 1.14 versi tidak menerima convert_links = ondengan -O-pilihan. Itu gagal karena kesalahan -k can be used together with -O only if outputting to a regular file.. Apakah itu diharapkan?
Prasad Bonthu

28

Ada banyak cara untuk mendapatkan halaman dari baris perintah ... tetapi itu juga tergantung apakah Anda menginginkan sumber kode atau halaman itu sendiri:

Jika Anda membutuhkan sumber kode:

dengan ikal:

curl $url

dengan wget:

wget -O - $url

tetapi jika Anda ingin mendapatkan apa yang dapat Anda lihat dengan browser, lynx bisa berguna:

lynx -dump $url

Saya pikir Anda dapat menemukan begitu banyak solusi untuk masalah kecil ini, mungkin Anda harus membaca semua halaman manual untuk perintah tersebut. Dan jangan lupa ganti $urldengan URL Anda :)

Semoga berhasil :)



3
content=`wget -O - $url`

@rjack: (Tapi artikel yang Anda tautkan membuat kasus yang cukup bagus untuk sintaks $ (...).)
Jim Lewis

3

Jika Anda memiliki LWP terinstal, ia menyediakan biner bernama " GET ".

$ GET http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transisi // EN">
<HTML>
<KEPALA>
  <META http-equiv = "Content-Type" content = "text / html; charset = utf-8">
  <TITLE> Contoh Halaman Web </TITLE>
</HEAD> 
<body>  
<p> Anda telah mencapai halaman web ini dengan mengetik & quot; example.com & quot ;,
& quot; example.net & quot;, & quot; example.org & quot
  atau & quot; example.edu & quot; ke browser web Anda. </p>
<p> Nama domain ini dicadangkan untuk digunakan dalam dokumentasi dan tidak tersedia 
  untuk pendaftaran. Lihat <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, Bagian 3. </p>
</BODY>
</HTML>

wget -O-,, curldan lynx -sourceberperilaku serupa.


2

Anda dapat menggunakan curlatau wgetuntuk mengambil data mentah, atau Anda dapat menggunakan w3m -dumpuntuk memiliki representasi teks yang bagus dari sebuah halaman web.

$ 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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.