Kabuk değişkeninde bir web sayfasının içeriği nasıl elde edilir?


115

Linux'ta bir URL'yi nasıl getirebilirim ve içeriğini kabuk komut dosyasındaki bir değişkende nasıl alabilirim?

Yanıtlar:


189

wgetSayfayı indirmek ve aşağıdaki gibi bir değişkene okumak için command kullanabilirsiniz :

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

Sayfa içeriğinin dökümü yapılan dosyanın adını belirlememize izin veren -Oseçeneği kullanıyoruz . Biz belirtmek standart çıkışa üzerine dökümü almak ve değişken içine toplamak . Wget çıktısını kapatmak için sessiz seçeneğini ekleyebilirsiniz .wgetwget-content-q

Bunun için curl komutunu şu şekilde kullanabilirsiniz :

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

İstediğimiz -Lsayfa taşınmış olabileceği için seçeneği kullanmamız gerekiyor . Bu durumda sayfayı yeni konumdan almamız gerekir. -LVeya --locationopsiyon bu bize yardımcı olur.


Bu gerçekten güzel bir numara. Bir vekil sunucudaki php betiği aracılığıyla bir kabuk betiğini çağırıyorum. Proxy sunucusu sorulduğunda, 2 saat sonra kendilerini kapatan pahalı sunucuları açar. Standart çıktının Jenkins konsol kaydına geri beslenmesi için wget çıktıya ihtiyacım var.
Dennis

Henüz bunu anlamadım ... herhangi biri nasıl olduğunu gösterebilir mi, örneğin. bu bağlantı için bir değişkende img etiketi alın www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108

@ juggernaut1996: bu ayrı bir soru olmalı. Kısaca, sayfayı indirmeniz src, doğru elemanın özniteliğini çıkarmanız ve ardından o sayfayı indirmeniz gerekir . Eğer yüklerseniz tq bu komut bunu yapmalıdır: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 sürümü seçeneği convert_links = onile kabul edilmiyor -O-. Hata ile başarısız oluyor -k can be used together with -O only if outputting to a regular file.. Bekleniyor mu?
Prasad Bonthu

28

Komut satırından bir sayfa almanın birçok yolu vardır ... ama aynı zamanda kod kaynağını mı yoksa sayfanın kendisini mi istediğinize bağlıdır:

Kod kaynağına ihtiyacınız varsa:

curl ile:

curl $url

wget ile:

wget -O - $url

ancak bir tarayıcıyla görebildiğinizi elde etmek istiyorsanız, lynx yararlı olabilir:

lynx -dump $url

Sanırım bu küçük problem için pek çok çözüm bulabilirsin, belki de bu komutlar için tüm man sayfalarını okumalısın. Ve $urlURL'nizle değiştirmeyi unutmayın :)

İyi şanslar :)



3
content=`wget -O - $url`

@rjack: (Ancak bağlantı verdiğiniz makale $ (...) sözdizimi için oldukça iyi bir örnek teşkil ediyor.)
Jim Lewis

3

Eğer varsa LWP yüklü, sadece "adlı bir ikili sağlar GET ".

$ GET http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Geçiş // EN">
<HTML>
<Head>
  <META http-equiv = "İçerik Türü" content = "text / html; charset = utf-8">
  <TITLE> Örnek Web Sayfası </TITLE>
</ Head> 
<Body>  
<p> Bu web sayfasına & quot; example.com & quot; yazarak ulaştınız,
Ve quot; example.net & quot; & quot; example.org ve quot
  veya & quot; example.edu & quot; web tarayıcınıza. </p>
<p> Bu alan adları, belgelerde kullanılmak üzere ayrılmıştır ve mevcut değildir 
  Kayıt için. <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC'ye bakın
  2606 </a>, Bölüm 3. </p>
</ BODY>
</ HTML>

wget -O-, curlve lynx -sourcebenzer şekilde davranın.


2

Ham veriyi curlveya wgetgeri almak için kullanabilir veya w3m -dumpbir web sayfasının güzel bir metin temsiline sahip olmak için kullanabilirsiniz .

$ 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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.