ब्राउज़र के रूप में सटीक वेब पेज एचटीएमएल डाउनलोड करने के लिए WGET कैसे प्राप्त करें


34

एक वेब ब्राउज़र (IE या क्रोम) का उपयोग करके मैं Ctl-S के साथ एक वेब पेज (.html) को सहेज सकता हूं, किसी भी पाठ संपादक के साथ इसका निरीक्षण कर सकता हूं, और तालिका प्रारूप में डेटा देख सकता हूं। उन संख्याओं में से एक जिन्हें मैं निकालना चाहता हूं, लेकिन कई के लिए, कई वेब पेज, बहुत से मैन्युअल रूप से करने के लिए। इसलिए मैं एक के बाद एक उन वेब पेजों को पाने के लिए WGET का उपयोग करना चाहूंगा, और .html को पार्स करने के लिए एक और प्रोग्राम लिखूंगा और मुझे जो नंबर चाहिए उसे पुनः प्राप्त करेगा। लेकिन .GG द्वारा सहेजी गई .html फ़ाइल उसी URL का उपयोग करते समय होती है जब ब्राउज़र में डेटा तालिका नहीं होती है। क्यों नहीं? यह वैसा ही है जैसे कि सर्वर का पता लगाता है कि अनुरोध WGET से आ रहा है न कि किसी वेब ब्राउज़र से, और डेटा टेबल की कमी से कंकाल वेब पेज को सप्लाई करता है। मैं WGET के साथ सटीक वेब पेज कैसे प्राप्त कर सकता हूं? - धन्यवाद!

और जानकारी:

URL जो मैं लाने का प्रयास कर रहा हूं, उसका एक उदाहरण है: http://performance.morningstar.com/fund/performance-return.action?t=ICENX®ion=usa&culture=en-US जहां स्ट्रिंग ICENX एक म्यूचुअल फंड टिकर प्रतीक है , जो मैं कई अलग-अलग टिकर प्रतीकों में से किसी एक में बदल रहा हूं। यह एक ब्राउज़र में देखे जाने पर डेटा तालिका को डाउनलोड करता है, लेकिन WGET के साथ लाए जाने पर डेटा तालिका अनुपलब्ध है।


कौन सा url है?
ब्रिअम

2
सबसे अधिक संभावना है कि प्रारंभिक HTML AJAX तकनीकों का उपयोग करके एक जावास्क्रिप्ट टुकड़े द्वारा भरा जाता है जो तालिका को डाउनलोड और पॉप्युलेट करता है। इस मामले में आपके पास इस स्क्रिप्ट पर कॉल को भूल जाना बेहतर होगा। जैसे ब्रिएम पूछता है, यदि आप URL प्रदान करते हैं, तो हम इसे बेहतर बनाने में मदद कर सकते हैं।
रोडमैप

1
विज्ञापन अधिक जानकारी: ब्राउज़र में, जब आप एक स्रोत कोड प्रदर्शित करते हैं, तो आप मूल HTML (जिसे wget द्वारा प्राप्त किया गया है) नहीं देखते हैं, लेकिन जावास्क्रिप्ट / ajax द्वारा अपडेट किया गया HTML। आधुनिक ब्राउज़र सादे HTML के बजाय ऐसे उत्पन्न स्रोत दिखाते हैं।
व्रता ब्लेज़ेक

जवाबों:


39

के रूप में roadmr बताया गया है, इस पृष्ठ पर तालिका जावास्क्रिप्ट द्वारा उत्पन्न होता है। wav javascript का समर्थन नहीं करता है, यह सिर्फ सर्वर से प्राप्त पृष्ठ (जैसे कि कोई जावास्क्रिप्ट कोड चलने से पहले) को डुबो देता है और इसलिए तालिका गायब है।

आपको एक हेडलेस ब्राउज़र की आवश्यकता है जो कि फैंटमज की तरह जावास्क्रिप्ट का समर्थन करता है :

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

save_page.js के साथ:

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

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

यदि आप केवल कुछ पाठ निकालना चाहते हैं, तो पृष्ठ को w3m के साथ प्रस्तुत करना सबसे आसान हो सकता है:

$ w3m -dump page.html

और / या प्रेत स्क्रिप्ट को संशोधित करने के लिए जो आप में रुचि रखते हैं उसे डुबो दें।


यह भी काम नहीं करता है, उदाहरण के लिए cotrino.com/lifespan
mrgloom

जेएस ने लिंक के साथ काम नहीं किया
QZZ

1
2018: फैंटम जेएस परियोजना को अगली सूचना तक निलंबित कर दिया गया है :(
1rq3fea324wre

यह समाधान केवल निर्दिष्ट यूआरएल के पृष्ठों को डाउनलोड करने के लिए है। आप पाइप की साइट के क्रॉलिंग तंत्र को इसके साथ कैसे जोड़ते हैं? इसके अलावा, हेडलेस क्रोम के साथ स्क्रिप्ट कैसी दिखेगी?
फिल

10

आप एक पूर्ण वेबसाइट का उपयोग कर डाउनलोड कर सकते हैं wget --mirror

उदाहरण:

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

उपरोक्त कमांड लाइन जिसे आप निष्पादित करना चाहते हैं जब आप एक पूर्ण वेबसाइट डाउनलोड करना चाहते हैं और स्थानीय देखने के लिए उपलब्ध कराया गया है।

विकल्प:

  • --mirror मिररिंग के लिए उपयुक्त विकल्पों को चालू करता है।

  • -p उन सभी फ़ाइलों को डाउनलोड करता है जो किसी दिए गए HTML पृष्ठ को ठीक से प्रदर्शित करने के लिए आवश्यक हैं।

  • --convert-links डाउनलोड के बाद, स्थानीय देखने के लिए दस्तावेज़ में लिंक परिवर्तित करें।

  • -P ./LOCAL-DIR निर्दिष्ट निर्देशिका के लिए सभी फ़ाइलों और निर्देशिकाओं को बचाता है।

Wget के विकल्पों के बारे में अधिक जानकारी के लिए यह लेख पढ़ें: सभी उदाहरणों के साथ Wget कमांड के बारे में अवलोकन करें या Wget के मैन पेज की जाँच करें ।


2
यह जावास्क्रिप्ट प्रदान की गई सामग्री के साथ काम नहीं करेगा। इसके लिए आपको lemonsqueeze द्वारा उत्तर के रूप में प्रेत का उपयोग करने की आवश्यकता होगी।
मैटियस

1
यह cmd सभी उप-urls से भी गुजरेगा, जो उन संसाधनों को डाउनलोड करेगा जिन्हें दिए गए वेबपेज को प्रस्तुत करने की आवश्यकता नहीं है।
1rq3fea324wre

3

इसके बजाय --recursive, जो सिर्फ आगे बढ़ेगा और आपके URL के हर एक लिंक को "स्पाइडर" करेगा, उपयोग करें --page-requisites। चित्रमय ब्राउज़रों में आपके द्वारा वर्णित विकल्पों के समान ही व्यवहार करना चाहिए।

       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.

अधिक जानकारी के लिए, करें man wgetऔर --page-requisitesमैन पेज को पढ़ते समय खोजने के लिए विकल्प ("/" का उपयोग करें)।


2

यदि सर्वर का उत्तर एक पूछते हुए स्रोत के आधार पर भिन्न होता है, तो यह ज्यादातर HTTP_USER_AGENT चर (सिर्फ एक पाठ स्ट्रिंग) के कारण होता है, जो सर्वर से तकनीक के बारे में सूचित करते हुए, स्रोत से अनुरोध के साथ प्रदान किया जाता है।


  1. आप यहां अपने ब्राउज़र एजेंट की जांच कर सकते हैं -> http://whatsmyuseragent.com

  2. डब्ल्यूजीईटी मैनुअल के अनुसार इस पैरामीटर को काम करना चाहिए --user-agent=AGENT


यदि यह मदद नहीं करता है, तो एक ब्राउज़र के रूप में एक ही पृष्ठ प्राप्त करने के लिए जावास्क्रिप्ट प्रसंस्करण की आवश्यकता हो सकती है, या शायद जीईटी मापदंडों के साथ उपयुक्त अनुरोध हो सकता है, इसलिए सर्वर उत्तर तैयार करेगा जिसमें पृष्ठ को भरने के लिए जावास्क्रिप्ट की आवश्यकता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.