एक HTTP निर्देशिका से सभी फ़ाइल नाम (सामग्री नहीं) की पुनरावृत्ति हो रही है


9

एक बड़ी जैविक अनुसंधान परियोजना ने अपने संग्रह को यहां https के माध्यम से उपलब्ध कराने के लिए चुना है:

https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/

दुर्भाग्य से, ऐसा प्रतीत होता है कि इन निर्देशिकाओं की सामग्री का कोई प्रकट नहीं है, इसलिए मैं केवल एक का निर्माण करना चाहता हूं। मैं पूरी निर्देशिका ट्री के लिए फ़ाइल नाम रखना चाहता हूँ। क्या ऐसा करने के लिए कोई सुझाव हैं? मैं perl / python / R / etc में कुछ लिख सकता हूं। index.html फ़ाइलों को फिर से परिमार्जन करने के लिए, लेकिन मुझे लगा कि इसमें कुछ भटकाव हो सकता है जो मुझे फ़ाइल नाम दे सकते हैं लेकिन मुझे अभी तक ऐसा नहीं मिला है।

जवाबों:


5

मुझे वास्तव में वही समस्या थी । इन दोनों समाधानों ने मेरे लिए काम नहीं किया। हालाँकि, इसने किया:

Lftp स्थापित करें, फिर करें

lftp https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/
du -a > manifest.txt

और वह आपको सभी निर्देशिका और फ़ाइल नाम देगा।


4

एफ़टीपी प्रोटोकॉल के विरोध में, HTTP एक निर्देशिका लिस्टिंग की अवधारणा को नहीं जानता है। इस प्रकार, wgetकेवल उपयोगकर्ता के परिभाषित कुछ नियमों के अनुसार लिंक की तलाश कर सकते हैं और उनका पालन कर सकते हैं।

यह कहा जा रहा है, यदि आप पूरी तरह से चाहते हैं, तो आप wgetHTML पृष्ठों का विश्लेषण करते समय उन लिंक की सूची एकत्र करने के लिए डिबग मोड का दुरुपयोग कर सकते हैं जो इसका सामना करते हैं। यह सुनिश्चित है कि कोई सुंदरता नहीं है, लेकिन यहाँ जाता है:

wget -d -r -np -N --spider -e robots=off --no-check-certificate \
  https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/ \
  2>&1 | grep " -> " | grep -Ev "\/\?C=" | sed "s/.* -> //"

कुछ कटाक्ष:

  • यह एक सूची का उत्पादन करेगा जिसमें अभी भी डुप्लिकेट (निर्देशिकाओं के) शामिल हैं, इसलिए आपको आउटपुट को किसी फ़ाइल में रीडायरेक्ट करने और uniqएक छंटनी सूची के लिए उपयोग करने की आवश्यकता है ।
  • --spiderwgetकुछ भी डाउनलोड नहीं करने का कारण बनता है , लेकिन यह अभी भी प्रत्येक फ़ाइल पर एक HTTP HEAD अनुरोध करेगा , जो इसे समाप्त करने के लिए तैयार है । यह वास्तव में जरूरत से ज्यादा यातायात का कारण होगा / इरादा है और पूरी चीज को काफी धीमा कर देता है।
  • -e robots=offएक robots.txtफ़ाइल को अनदेखा करने की आवश्यकता है जो wgetखोज शुरू न करने का कारण हो सकती है (जो आपके प्रश्न में दिए गए सर्वर के लिए मामला है)।
  • यदि आपके पास wget1.14 या नया है, तो आप --reject-regex="\?C="अनावश्यक अनुरोधों की संख्या को कम करने के लिए उपयोग कर सकते हैं (उन "सॉर्ट-बाय" लिंक के लिए जो पहले से ही @ एसएलएम द्वारा उल्लिखित है)। यह grep -Ev "\/\?C="बाद में कदम की आवश्यकता को भी समाप्त कर देता है ।

2

मैंने सोचा था कि wget / curl के साथ आसानी से ऐसा करने का एक तरीका होगा, लेकिन काम करने के लिए कुछ भी नहीं मिल सकता है। आप इस रूबी रत्न, एनीमोन का उपयोग कर सकते हैं, हालांकि इसे आसानी से कर सकते हैं।

एनीमोन रत्न स्थापित करना

% gem install anemone
Fetching: robotex-1.0.0.gem (100%)
Fetching: anemone-0.7.2.gem (100%)
Successfully installed robotex-1.0.0
Successfully installed anemone-0.7.2
2 gems installed
Installing ri documentation for robotex-1.0.0...
Installing ri documentation for anemone-0.7.2...
Installing RDoc documentation for robotex-1.0.0...
Installing RDoc documentation for anemone-0.7.2...

नमूना एनीमोन स्क्रिप्ट

#! /usr/bin/env ruby
require 'anemone'

Anemone.crawl("https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/") do |anemone|
  anemone.on_every_page do |page|
      puts page.url
  end
end

उदाहरण चलाते हैं

% ./anemone.rb | grep -v '?C='
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/README_BCR.txt
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/README_MAF.txt
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/acc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/brca/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/blca/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/cesc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/cntl/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/dlbc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/coad/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/esca/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/gbm/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/hnsc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/kich/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/kirc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/kirp/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lcll/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/laml/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lcml/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lihc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lgg/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lnnh/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lost+found/
...
...

नोट: बिट grep -v '?C='बॉयलरप्लेट हेडर को फ़िल्टर कर रहा है जिसे Apache अपने अनुक्रमण निर्देश के माध्यम से उत्पन्न कर रहा है, अर्थात:

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable

    अपाचे के ss ने कॉलम सॉर्टर का प्रतिपादन किया

ये आपको अलग-अलग कॉलम (नाम, तिथि बनाएँ, आदि) द्वारा पृष्ठों को क्रमबद्ध करने की अनुमति देते हैं। ये पृष्ठ के रूप में दिखाई देते हैं और मैं उन्हें आउटपुट से फ़िल्टर कर रहा हूं।

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