WGET'in html ile aynı web sayfasını tarayıcı olarak indirmesi


34

Bir web tarayıcısı kullanarak (IE veya Chrome) Bir web sayfasını (.html) Ctl-S ile kaydedebilir, herhangi bir metin düzenleyicide inceleyebilir ve verileri tablo biçiminde görebilirim. Çıkarmak istediğim bu numaralardan biri, ancak birçok web sayfası için, el ile yapmak için çok fazla. Bu yüzden, bu web sayfalarını birbiri ardına almak için WGET'i kullanmak ve .html'yi ayrıştırmak ve istediğim numarayı almak için başka bir program yazmak istiyorum. Ancak, tarayıcı ile aynı URL'yi kullanırken WGET tarafından kaydedilen .html dosyası veri tablosunu içermiyor. Neden olmasın? Sanki sunucu, isteğin bir web tarayıcısından değil WGET'ten geldiğini tespit ediyor ve veri tablosundan yoksun bir iskelet web sayfası sağlıyor gibi. WGET ile aynı web sayfasını nasıl bulabilirim? - Teşekkürler!

DAHA FAZLA BİLGİ:

Getirmeye çalıştığım URL’nin bir örneği: http://performance.morningstar.com/fund/performance-return.action?t=ICENX®ion=usa&culture=en-US ki bu, birçok farklı ticker sembolünden herhangi birine değiştireceğim. Bu, bir tarayıcıda görüntülendiğinde bir veri tablosu indirir, ancak WGET ile getirildiğinde veri tablosu eksiktir.


Hangi url?
Braiam

2
Büyük olasılıkla ilk HTML, AJAX tekniklerini kullanarak tabloyu indiren ve dolduran bir javascript parçası ile doldurulur. Bu durumda, muhtemelen bu betiğe yapılan çağrıyı yazmada daha iyi şanslar. Braiam'ın sorduğu gibi, eğer URL'yi sağlarsanız, bunu daha iyi çözmemize yardımcı olabiliriz.
kenarı

1
ad Daha Fazla Bilgi: Tarayıcıda, bir kaynak kodunu görüntülediğinizde, orijinal HTML'yi (wget ile aynı) görmezsiniz, ancak javascript / ajax tarafından güncellenmiş HTML'yi görürsünüz. Modern tarayıcılar, düz HTML yerine bu tür oluşturulan kaynak gösterir.
Vrata Blazek

Yanıtlar:


39

Gibi roadmr kaydetti, bu sayfadaki tablo javascript tarafından oluşturulur. wget, javascript'i desteklemiyor, sadece sayfayı sunucudan aldığı şekilde döküyor (yani herhangi bir javascript kodu çalıştırılmadan önce) ve böylece tablo eksik.

Phantomjs gibi javascript destekleyen bir başsız tarayıcıya ihtiyacınız var :

$ phantomjs save_page.js http://example.com > page.html

save_page.js ile:

var system = require('system');
var page = require('webpage').create();

page.open(system.args[1], function()
{
    console.log(page.content);
    phantom.exit();
});

O zaman sadece bir metin çıkartmak istiyorsanız, en kolay sayfa w3m ile işlenebilir:

$ w3m -dump page.html

ve / veya phantomjs betiğini, ilgilendiğiniz şeyleri atmak için değiştirin.


Bu da işe yaramaz, örneğin cotrino.com/lifespan
mrgloom

JS
bununla

1
2018: PhantomJS projesi bir sonraki duyuruya kadar askıya alındı ​​:(
1rq3fea324wre

Bu çözüm yalnızca belirtilen URL'lerden sayfa indirmek içindir. Wget’ın site tarama mekanizmasını nasıl kullanıyorsunuz? Ayrıca, senaryo başsız kromla nasıl görünür?
Phil

10

Kullanarak Tam Bir Web Sitesi indirebilirsiniz wget --mirror

Örnek:

wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL

Tam bir web sitesi indirmek istediğinizde çalıştırmak istediğiniz ve yerel görüntüleme için uygun hale getirdiğiniz yukarıdaki komut satırı.

Seçenekler:

  • --mirror yansıtmaya uygun seçenekleri açar.

  • -p Verilen bir HTML sayfasını düzgün görüntülemek için gerekli olan tüm dosyaları indirir.

  • --convert-links indirdikten sonra, yerel görüntüleme için belgedeki bağlantıları dönüştürün.

  • -P ./LOCAL-DIR tüm dosyaları ve dizinleri belirtilen dizine kaydeder.

Wget Seçenekleri hakkında daha fazla bilgi için Bu makalenin devamını okuyun: Genel Bakış Örneklerle birlikte tüm wget Komutları hakkında veya Wget'ın man sayfasını kontrol edin .


2
Bu, javascript ile oluşturulmuş içerikle çalışmaz. Bunun için lemonsqueeze tarafından cevap verilen fantomları kullanmanız gerekir.
Mattias

1
Bu cmd de tüm alt URL'lerden geçecek ve verilen web sayfasını oluşturmak için gerekli olmayan kaynakları indirecektir.
1rq3fea324wre

3

Bunun yerine --recursive, devam edecek ve URL'nizdeki her bir bağlantıyı "örümcek" olarak kullanacaksınız --page-requisites. Grafik tarayıcılarda tam olarak tanımladığınız seçenekler gibi davranmalıdır.

       This option causes Wget to download all the files that are
       necessary to properly display a given HTML page.  This includes
       such things as inlined images, sounds, and referenced stylesheets.

       Ordinarily, when downloading a single HTML page, any requisite
       documents that may be needed to display it properly are not
       downloaded.  Using -r together with -l can help, but since Wget
       does not ordinarily distinguish between external and inlined
       documents, one is generally left with "leaf documents" that are
       missing their requisites.

Daha fazla bilgi man wgetiçin, --page-requisitesseçeneği araştırın ve arayın (bir man sayfasını okurken aramak için "/" kullanın).


2

Sunucunun yanıtı, sorulan bir kaynağa bağlı olarak değişirse, bunun nedeni, soruyu soran kaynaktan yapılan bir istekle sağlanan ve sunucuyu teknoloji hakkında bilgilendiren HTTP_USER_AGENT değişkeninden (yalnızca bir metin dizesi) kaynaklanmaktadır.


  1. Tarayıcı temsilcinizi buradan kontrol edebilirsiniz -> http://whatsmyuseragent.com

  2. WGET el kitabına göre bu parametre işi yapmalıdır --user-agent=AGENT.


Bu işe yaramazsa, yani bir tarayıcı ile aynı sayfayı almak için JavaScript işleme gerekebilir ya da GET parametreleriyle uygun bir istek olabilir, böylece sunucu sayfayı doldurmak için JavaScript gerektirmeyen bir cevap hazırlar.

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.