wget - कैसे पुनरावर्ती और केवल विशिष्ट माइम-प्रकार / एक्सटेंशन डाउनलोड करें (केवल पाठ के लिए)


22

एक पूर्ण वेबसाइट कैसे डाउनलोड करें, लेकिन सभी बाइनरी फ़ाइलों को अनदेखा करें।

wget-rध्वज का उपयोग करते हुए यह कार्यक्षमता है, लेकिन यह सब कुछ डाउनलोड करता है और कुछ वेबसाइटें कम-संसाधन मशीन के लिए बहुत अधिक हैं और यह उस विशिष्ट कारण के लिए उपयोग नहीं है जो मैं साइट डाउनलोड कर रहा हूं।

यहाँ कमांड लाइन मैं उपयोग कर रहा हूँ: wget -P 20 -r -l 0 http://www.omardo.com/blog(मेरा अपना ब्लॉग)


1
wget केवल फ़ाइल प्रत्यय के साथ फ़िल्टर कर सकता है
daisy

@ warl0ck मुझे नहीं पता था कि, धन्यवाद! -ए -आर विकल्प मेरे संचालन के लिए बहुत उपयोगी हैं।
उमर अल-इतावी

जवाबों:


21

आप स्वीकृत सम्मान की सूची निर्दिष्ट कर सकते हैं। अस्वीकृत फ़ाइल नाम पैटर्न:

अनुमति:

-A LIST
--accept LIST

अनुमति न दिया:

-R LIST
--reject LIST

LIST फ़ाइल नाम पैटर्न / एक्सटेंशन की अल्पविराम से अलग सूची है।

पैटर्न निर्दिष्ट करने के लिए आप निम्न आरक्षित वर्णों का उपयोग कर सकते हैं:

  • *
  • ?
  • [
  • ]

उदाहरण:

  • केवल PNG फ़ाइलें डाउनलोड करें: -A png
  • CSS फाइलें डाउनलोड न करें: -R css
  • PNG फ़ाइलों को डाउनलोड न करें जो "अवतार" से शुरू होती हैं: -R avatar*.png

यदि फ़ाइल का कोई एक्सटेंशन सम्मान नहीं है। फ़ाइल नाम का कोई पैटर्न नहीं है जिसका आप उपयोग कर सकते हैं, आपको MIME प्रकार पार्सिंग की आवश्यकता होगी, मुझे लगता है (देखें लार्स कोथोफॉफ़ उत्तर )।


2

आप MIME प्रकार से फ़िल्टर करने के लिए इस ( यहां भी ) के साथ पैचिंग की कोशिश कर सकते हैं । यह पैच हालांकि अभी काफी पुराना है, इसलिए यह अब काम नहीं कर सकता है।


यह एक शॉट दे रहा है ... ftp.gnu.org/gnu/wget मैंने पासा के नवीनतम संस्करण को इस के साथ पैचिंग पर लुढ़काया लेकिन कोई भाग्य नहीं (बिल्कुल)। मैं पैच को अपडेट करने की कोशिश करूंगा, लेकिन मैं स्पष्ट रूप से अभी तक सी ++ में चॉप नहीं कर पाया हूं, क्योंकि यह टाइम सिंक नहीं है। मैंने इसके लिए लिखे गए wget के संस्करण को हड़पने का प्रबंधन किया और उस दौड़ को प्राप्त किया। हालांकि ssl समर्थन के साथ संकलन करने में मुझे परेशानी हुई, क्योंकि मैं यह नहीं पता लगा सका कि मुझे ओपनस्ले के किस संस्करण को हथियाने की जरूरत है।
MageProspero

यह बहुत अच्छा लग रहा है। किसी भी विचार क्यों इस पैच अभी तक (चार साल बाद) स्वीकार नहीं किया गया है?
डेविड पोर्टेबेला

2

एक नए Wget (Wget2) में पहले से ही सुविधा है:

--filter-mime-type    Specify a list of mime types to be saved or ignored`

### `--filter-mime-type=list`

Specify a comma-separated list of MIME types that will be downloaded.  Elements of list may contain wildcards.
If a MIME type starts with the character '!' it won't be downloaded, this is useful when trying to download
something with exceptions. For example, download everything except images:

  wget2 -r https://<site>/<document> --filter-mime-type=*,\!image/*

It is also useful to download files that are compatible with an application of your system. For instance,
download every file that is compatible with LibreOffice Writer from a website using the recursive mode:

  wget2 -r https://<site>/<document> --filter-mime-type=$(sed -r '/^MimeType=/!d;s/^MimeType=//;s/;/,/g' /usr/share/applications/libreoffice-writer.desktop)

Wget2 को आज के रूप में जारी नहीं किया गया है, लेकिन जल्द ही होगा। डेबियन अस्थिर पहले से ही एक अल्फा संस्करण भेज दिया गया है।

अधिक जानकारी के लिए https://gitlab.com/gnuwget/wget2 को देखें । आप बग-wget@gnu.org पर सीधे सवाल / टिप्पणी पोस्ट कर सकते हैं।


1

मैंने पूरी तरह से अलग दृष्टिकोण की कोशिश की है, स्क्रेपी का उपयोग करना है, हालांकि यह एक ही समस्या है! यहां बताया गया है कि मैंने इसे कैसे हल किया: SO: पायथन स्क्रेपी - गैर-पाठ फ़ाइल डाउनलोड से बचने के लिए mimetype आधारित फ़िल्टर?

समाधान एक Node.jsप्रॉक्सी को सेटअप करना है और इसे http_proxyपर्यावरण चर के माध्यम से उपयोग करने के लिए स्क्रेपी को कॉन्फ़िगर करना है ।

क्या प्रॉक्सी क्या करना चाहिए है:

  • स्क्रेपी से HTTP अनुरोध लें और इसे क्रॉल किए जा रहे सर्वर पर भेज दें। फिर यह स्क्रेपी से प्रतिक्रिया वापस देता है अर्थात सभी HTTP ट्रैफ़िक को रोक देता है।
  • द्विआधारी फ़ाइलों के लिए (आपके द्वारा लागू किए गए एक अनुमान के आधार पर) यह 403 Forbiddenस्क्रेपी को त्रुटि भेजता है और अनुरोध / प्रतिक्रिया को तत्काल बंद कर देता है। यह समय बचाने में मदद करता है, ट्रैफ़िक और स्क्रेपी क्रैश नहीं होगा।

नमूना प्रॉक्सी कोड जो वास्तव में काम करता है!

http.createServer(function(clientReq, clientRes) {
    var options = {
        host: clientReq.headers['host'],
        port: 80,
        path: clientReq.url,
        method: clientReq.method,
        headers: clientReq.headers
    };


    var fullUrl = clientReq.headers['host'] + clientReq.url;

    var proxyReq = http.request(options, function(proxyRes) {
        var contentType = proxyRes.headers['content-type'] || '';
        if (!contentType.startsWith('text/')) {
            proxyRes.destroy();            
            var httpForbidden = 403;
            clientRes.writeHead(httpForbidden);
            clientRes.write('Binary download is disabled.');
            clientRes.end();
        }

        clientRes.writeHead(proxyRes.statusCode, proxyRes.headers);
        proxyRes.pipe(clientRes);
    });

    proxyReq.on('error', function(e) {
        console.log('problem with clientReq: ' + e.message);
    });

    proxyReq.end();

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