2012-06-20 3 views
30

मैं wget आदेश का उपयोग करने के लिए कोशिश कर रहा हूँ। कुछ वेबसाइटों के लिए यह काम करता है लेकिन ज्यादातर मामलों में, यह केवल index.html डाउनलोड करता है। मैंने wget -r कमांड की कोशिश की है लेकिन यह काम नहीं करता है। कोई भी जानता है कि किसी पृष्ठ पर सभी फ़ाइलों को कैसे लाया जाए, या बस मुझे पृष्ठ पर फ़ाइलों और संबंधित यूआरएल की एक सूची दें?क्यों कुछ वेबसाइटों के लिए wget केवल index.html डाउनलोड करता है?</p> <pre><code>wget -p http://www.example.com </code></pre> <p>मुख्य पृष्ठ पर सभी फ़ाइलें लाने के लिए:

+1

क्या आपके पास एक उदाहरण यूआरएल है? – Fabien

+0

यह आपके [पिछले प्रश्न] से भिन्न कैसे है (http://stackoverflow.com/questions/11123477/how-to-get-a-list-of-all-paths-files-on-a-webpage-using- wget या कर्ल-इन-php)? यदि यह वही समस्या है, तो इसे स्पष्ट करने के लिए अपने पुराने प्रश्न को संपादित करें। –

+0

संभावित डुप्लिकेट [PHP में wget या curl का उपयोग कर किसी वेबपृष्ठ पर सभी पथों/फ़ाइलों की सूची कैसे प्राप्त करें?] (Https://stackoverflow.com/questions/11123477/how-to-get-a-list-of -ल-पथ-फाइल-ऑन-ए-वेबपृष्ठ-उपयोग-wget-or-curl-in-php) –

उत्तर

63

Wget भी एक पूरी वेबसाइट डाउनलोड करने में सक्षम है। लेकिन क्योंकि यह सर्वर पर भारी भार डाल सकता है, wget robots.txt फ़ाइल का पालन करेगा।

wget -r -p http://www.example.com 

-p पैरामीटर छवियों समेत सभी फ़ाइलों को शामिल करने के लिए wget को बताता है। इसका मतलब यह होगा कि सभी HTML फाइलें देखेंगे कि उन्हें कैसे करना चाहिए।

तो क्या होगा यदि आप robots.txt फ़ाइल द्वारा पालन करना चाहते हैं? वे अपने ब्राउज़र पहचान की जाँच करेगा

wget -r -p -e robots=off http://www.example.com 

के रूप में कई साइटों आप पूरी साइट डाउनलोड नहीं दूँगी,: आप बस -e रोबोट = जोड़ने इस तरह आदेश के लिए रवाना कर सकते हैं। इसके आस-पास पहुंचने के लिए, जैसा कि मैंने ऊपर बताया है -U मोज़िला का उपयोग करें।

wget -r -p -e robots=off -U mozilla http://www.example.com 

बहुत से वेबसाइट मालिक इस तथ्य को पसंद नहीं करेंगे कि आप अपनी पूरी साइट डाउनलोड कर रहे हैं। यदि सर्वर देखता है कि आप बड़ी मात्रा में फाइलें डाउनलोड कर रहे हैं, तो यह आपको स्वचालित रूप से इसकी ब्लैक लिस्ट में जोड़ सकता है। इस तरह के रास्ते हर डाउनलोड के बाद कुछ सेकंड इंतजार करना है। Wget का उपयोग करके ऐसा करने का तरीका है - wait = X (जहां एक्स सेकंड की मात्रा है।)

आप पैरामीटर का भी उपयोग कर सकते हैं: - यादृच्छिक-प्रतीक्षा करें wget को यादृच्छिक संख्या सेकेंड चुनने दें प्रतीक्षा करने के लिए। आदेश में इस में शामिल करने के लिए:

wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com 
+3

आपके उत्तर के लिए धन्यवाद। मैंने कुछ सामान्य यूआरएल (उदाहरण के लिए amazon.com) पर आपके द्वारा वर्णित 3 तरीकों की कोशिश की लेकिन मुझे जो मिला वह केवल index.html था। क्या आपके पास कोई अन्य सुझाव है? –

+3

यहां वही है। केवल index.html – BigSack

+3

@JayH उस पते का उपयोग न करने का प्रयास करें जिसे पुनर्निर्देशित किया जाएगा। आईई अगर आप '' http: // amazon.com''' का उपयोग करते हैं तो यह काम नहीं करेगा क्योंकि आपको www.amazon.com पर रीडायरेक्ट किया जाएगा, लेकिन यदि आप '' http: //www.amazon का उपयोग करेंगे .com''' यह सभी साइट डाउनलोड करना शुरू कर देगा। रोबोट फ़ाइल का पालन न करने की क्षमता कुछ ऐसा नहीं है जो "विनम्र" है, इसलिए यह उतना अच्छा काम नहीं करेगा जितना आप कल्पना कर सकते हैं। –

0

आप index.htmlthe wget manual में आप एक विकल्प --default-page=name जो index.html डिफ़ॉल्ट रूप से है पा सकते हैं ढूंढें। उदाहरण के लिए आप index.php में बदल सकते हैं।

--default-page=index.php 
2

मुझे पता है कि इस सूत्र पुराना है, लेकिन कोशिश के साथ क्या रितेश ने उल्लेख किया है:

--no-कुकीज़

यह मेरे लिए काम किया!

4

आपके द्वारा प्रदान किया गया लिंक होमपेज या /index.html है, इसलिए यह स्पष्ट है कि आपको केवल एक index.html पृष्ठ मिल रहा है। वास्तविक डाउनलोड के लिए, उदाहरण के लिए, "test.zip" फ़ाइल के लिए, आपको अंत में सटीक फ़ाइल नाम जोड़ना होगा। उदाहरण के लिए test.zip फ़ाइल डाउनलोड करने के लिए निम्न लिंक का उपयोग करें:

wget -p domainname.com/test।ज़िप

डाउनलोड एक पूर्ण वेबसाइट wget --mirror

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

wget --mirror -p --convert-लिंक -पी ./LOCAL-DIR http://www.example.com

  • -mirror: मिरर के लिए उपयुक्त विकल्प चालू।

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

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

  • -पी ./LOCAL-DIR: निर्दिष्ट निर्देशिका में सभी फ़ाइलों और निर्देशिकाओं को बचाने

डाउनलोड केवल कुछ फ़ाइल प्रकारों का प्रयोग wget -r -A

आप इस निम्न स्थितियों के तहत उपयोग कर सकते हैं :

  • डाउनलोड एक वेबसाइट से सभी छवियों,

  • डाउनलोड एक वेबसाइट से सभी वीडियो,

  • डाउनलोड एक वेबसाइट से सभी पीडीएफ फाइलों

wget -r -A.pdf http://example.com/test.pdf

+1

धन्यवाद। '--mirror' विकल्प अंत में यह मेरे लिए काम करता था। – vergenzt

+0

आप हमेशा @vergenzt का स्वागत करते हैं :) –

25

सबसे पहले, स्पष्ट करने के लिए प्रश्न, लक्ष्य index.html और उस पृष्ठ के सभी आवश्यक भागों (छवियों, आदि) को डाउनलोड करना है। -p विकल्प --page-requisites के समतुल्य है।

कारण आवश्यक पृष्ठ हमेशा डाउनलोड नहीं होते हैं यह है कि वे अक्सर मूल पृष्ठ (उदाहरण के लिए एक सीडीएन) से एक अलग डोमेन पर होस्ट किए जाते हैं। डिफ़ॉल्ट रूप से, wget refuses to visit other hosts, इसलिए आपको --span-hosts विकल्प के साथ होस्ट कमाना सक्षम करने की आवश्यकता है।

wget --page-requisites --span-hosts 'http://www.amazon.com/' 

आप index.html लोड और स्थानीय संस्करण से सभी पेज आवश्यक वस्तुएँ लोड करने में सक्षम होने की जरूरत है, तो आप --convert-links विकल्प जोड़ने के लिए है, तो img src में यूआरएल का श्रेय है कि (उदाहरण के लिए) की आवश्यकता होगी स्थानीय संस्करणों को इंगित करने वाले सापेक्ष यूआरएल को फिर से लिखा गया।

वैकल्पिक रूप से, आप --no-host-directories विकल्प जोड़कर एक ही "होस्ट" निर्देशिका के तहत सभी फ़ाइलों को सहेजना चाहेंगे, या --no-directories विकल्प जोड़कर सभी फ़ाइलों को एक एकल, फ्लैट निर्देशिका में सहेज सकते हैं।

--no-directories का उपयोग करने से परिणामस्वरूप कई फाइलें वर्तमान निर्देशिका में डाउनलोड की जा रही हैं, इसलिए आप --directory-prefix का उपयोग करके आउटपुट फ़ाइलों के लिए फ़ोल्डर नाम निर्दिष्ट करना चाहते हैं।

wget --page-requisites --span-hosts --convert-links --no-directories --directory-prefix=output 'http://www.amazon.com/' 
+0

मूल्यवान उत्तर के लिए धन्यवाद। इससे पहले कि मैं आपको उपहार प्रदान कर सकूं, इससे पहले कि आप इसे अधिक सामान्य बनाने के लिए कुछ अतिरिक्त जानकारी जोड़ सकें। उदाहरण के लिए, उदाहरण के लिए, इस लिंक के तहत 'http: // indiabix.com/सिविल इंजीनियरिंग/प्रश्न-और-उत्तर /', मैं प्रत्येक श्रेणी/अध्याय में जाने के लिए wget चाहता हूं और प्रत्येक अनुभाग में प्रत्येक पृष्ठ से सभी छवियों को डाउनलोड करना चाहता हूं (बाएं साइडबार पर)।नोटिस, छवियों से, मेरा मतलब है कि प्रश्नों में शामिल गणित सूत्रों की छवियों सहित सभी छवियां। * समस्या यह है कि डाउनलोड index.html डाउनलोड करने के बाद बंद हो जाता है। इस मामले के लिए एक कामकाजी उदाहरण बहुत अच्छा होगा !!! * –

+0

@InsaneCoder आप इसके लिए एक अलग सवाल शुरू करना चाहते हैं और दिखा सकते हैं कि आपने क्या प्रयास किया है, क्योंकि रिकर्सिव फ़ेचिंग समस्या का एक और सेट है, और (जैसा कि मैं समझता हूं यह) मूल सवाल क्या नहीं पूछ रहा था। –

+0

@InsaneCoder '--mirror' विकल्प जोड़ना सबसे सरल है, और आपकी आवश्यकताओं के लिए पर्याप्त हो सकता है। –

3

एक और समस्या हो सकती है कि आप जिस साइट को प्रतिबिंबित कर रहे हैं www बिना लिंक का उपयोग करता। तो अगर आप

wget -p -r http://www.example.com

निर्दिष्ट क्योंकि वे एक "अलग" डोमेन से हैं यह किसी भी जुड़ा हुआ (प्रशिक्षु) पृष्ठों डाउनलोड नहीं होंगे। यदि यह मामला है तो का उपयोग

wget -p -r http://example.com

बजाय

(www के बिना)।

+0

सही अवलोकन को पुनः प्राप्त नहीं किया जा सका। यह मेरी समस्या के लिए मूल कारण है। –

0

आप केवल index.html हो और उस फ़ाइल को लगता है कि यह केवल, (अर्थात् कोई पठनीय पाठ, केवल पात्रों को नियंत्रित) बाइनरी डेटा है तो साइट शायद gzip संपीड़न का उपयोग कर डेटा भेज रहा है तो।

आप यह देखने के लिए cat index.html | gunzip चलाकर यह पुष्टि कर सकते हैं कि यह पठनीय HTML आउटपुट करता है या नहीं।

यदि ऐसा है, तो wget की रिकर्सिव सुविधा (-r) काम नहीं करेगी। Gzip संपीड़ित डेटा के साथ काम करने के लिए wget के लिए patch है, लेकिन यह अभी तक मानक रिलीज़ में प्रतीत नहीं होता है।

संबंधित मुद्दे