कैसे एक वेबसाइट पर सभी लिंक / पृष्ठों को खोजने के लिए


97

क्या किसी भी वेबसाइट पर सभी पृष्ठों और लिंक को ढूंढना संभव है? मैं एक URL दर्ज करना चाहता हूं और उस साइट से सभी लिंक का डायरेक्टरी ट्री तैयार कर सकता हूं?

मैंने HTTrack को देखा है, लेकिन यह पूरी साइट को डाउनलोड करता है और मुझे केवल डायरेक्टरी ट्री की आवश्यकता है।


2
crawlmysite.in - साइट मौजूद नहीं है
सारा पेड़

जवाबों:


70

की जाँच करें linkchecker -यह साइट को क्रॉल जाएगा (जबकि पालन robots.txt) और एक रिपोर्ट उत्पन्न करते हैं। वहाँ से, आप डायरेक्टरी ट्री बनाने के लिए एक स्क्रिप्ट लिख सकते हैं।


बहुत बहुत धन्यवाद! बिल्कुल सही - मुझे जो चाहिए था। बहुत ज्यादा अधिमूल्यित।
जोनाथन लियोन

2
एक अच्छा उपकरण। मैं "XENU लिंक खोजी कुत्ता" का उपयोग कर रहा था। Linkchecker कहीं अधिक क्रिया है।
Mateng

मैं खुद ऐसा कैसे करूं? और क्या होगा अगर कोई web.txt नहीं है एक वेब साइट में?
एलन कोरोमोनो

1
@MariusKavansky आप किसी वेबसाइट को मैन्युअल रूप से कैसे क्रॉल करते हैं? या आप एक क्रॉलर का निर्माण कैसे करते हैं? मुझे यकीन नहीं है कि मैं आपके सवाल को समझ सकता हूँ। यदि कोई robots.txtफ़ाइल नहीं है, तो इसका मतलब है कि आप अपने दिल की सामग्री को क्रॉल कर सकते हैं।
हांक गे

8
हाय दोस्तों, लिंकेचर ने मेरे लिए काम नहीं किया है जब मैं साइट को स्कैन करता हूं तो यह केवल टूटी हुई लिंक की रिपोर्ट देता है। बहुत छोटी रिपोर्ट। जब यह होता है तो वे हजारों लिंक की जाँच करते हैं लेकिन मैं यह नहीं देख सकता कि वे कहाँ हैं। संस्करण 9.3 का उपयोग कर आप मदद कर सकते हैं?
JayPex

42

यदि आपके ब्राउज़र में डेवलपर कंसोल (जावास्क्रिप्ट) है, तो आप इस कोड को इसमें टाइप कर सकते हैं:

urls = document.querySelectorAll('a'); for (url in urls) console.log(urls[url].href);

छोटा:

n=$$('a');for(u in n)console.log(n[u].href)

1
"जावास्क्रिप्ट-एड" यूआरएल के बारे में क्या?
पचेरियर

जैसे क्या? आपका क्या अर्थ है?
इलेक्ट्रोबिट

2
मेरा मतलब है जावास्क्रिप्ट का उपयोग करके किया गया लिंक। आपका समाधान यह नहीं दिखाएगा।
पचेरियर

2
@ElectroBit मुझे वास्तव में यह पसंद है, लेकिन मुझे यकीन नहीं है कि मैं क्या देख रहा हूं? $$ऑपरेटर क्या है ? या यह कि सिर्फ एक मनमाना फ़ंक्शन नाम है, जैसा कि n=ABC(''a'); मैं समझ नहीं पा रहा हूं कि urlsसभी 'ए' टैग किए गए तत्व कैसे मिलते हैं। क्या तुम समझा सकते हो? मैं मान रहा हूँ कि इसका jQuery नहीं है। हम किस प्रोटोटाइप लाइब्रेरी फंक्शन की बात कर रहे हैं?
zipzit

1
@zipzit कुछ मुट्ठी भर ब्राउज़रों के $$()लिए मूल रूप से शॉर्टहैंड है document.querySelectorAll()। इस लिंक पर अधिक जानकारी: developer.mozilla.org/en-US/docs/Web/API/Document/…
ElectroBit

1

एक और विकल्प हो सकता है

Array.from(document.querySelectorAll("a")).map(x => x.href)

अपने $$(छोटे के साथ

Array.from($$("a")).map(x => x.href)

प्लस 1 - जैसे आप आधुनिक जेएस का उपयोग कर रहे हैं। मैंने इस कार्यक्रम को चलाया, और जब यह कुछ लिंक लौटाया, तो यह उन सभी .html पृष्ठों को वापस नहीं किया जो शीर्ष स्तर पर हैं। क्या कोई कारण है कि सभी पृष्ठ सरणी सूची में वापस नहीं आते हैं? धन्यवाद
Chris22

0

यदि यह एक प्रोग्रामिंग सवाल है, तो मैं आपको सभी पुनः प्राप्त सामग्री को पार्स करने के लिए अपनी खुद की नियमित अभिव्यक्ति लिखने का सुझाव दूंगा। लक्ष्य टैग मानक HTML के लिए IMG और A हैं। जावा के लिए,

final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)";

यह पैटर्न और मिलान वर्गों के साथ टैग की शुरुआत का पता लगाना चाहिए। यदि आप सीएसएस चाहते हैं तो लिंक टैग भी जोड़ें।

हालाँकि, यह उतना आसान नहीं है जितना कि आपने सोचा हो सकता है। कई वेब पेज अच्छी तरह से नहीं बने हैं। सभी लिंक को प्रोग्रामेटिक रूप से निकालना कि मानव "पहचान" कर सकता है वास्तव में मुश्किल है अगर आपको सभी अनियमित अभिव्यक्तियों को ध्यान में रखना चाहिए।

सौभाग्य!


18
नहीं नहीं नहीं नहीं, रेगेक्स के साथ HTML को पार्स मत करो, यह बेबी यीशु को रोता है!
dimo414

-2
function getalllinks($url) {
    $links = array();
    if ($fp = fopen($url, 'r')) {
        $content = '';
        while ($line = fread($fp, 1024)) {
            $content. = $line;
        }
    }
    $textLen = strlen($content);
    if ($textLen > 10) {
        $startPos = 0;
        $valid = true;
        while ($valid) {
            $spos = strpos($content, '<a ', $startPos);
            if ($spos < $startPos) $valid = false;
            $spos = strpos($content, 'href', $spos);
            $spos = strpos($content, '"', $spos) + 1;
            $epos = strpos($content, '"', $spos);
            $startPos = $epos;
            $link = substr($content, $spos, $epos - $spos);
            if (strpos($link, 'http://') !== false) $links[] = $link;
        }
    }
    return $links;
}

इस कोड को आज़माएं…।


10
हालांकि यह उत्तर संभवतः सही और उपयोगी है, यह पसंद किया जाता है यदि आप इसे समझाने के साथ कुछ स्पष्टीकरण भी शामिल करते हैं कि यह समस्या को हल करने में कैसे मदद करता है। यह भविष्य में विशेष रूप से उपयोगी हो जाता है, अगर कोई परिवर्तन (संभवतः असंबंधित) होता है जो इसे काम करना बंद कर देता है और उपयोगकर्ताओं को यह समझने की आवश्यकता होती है कि एक बार यह कैसे काम करता है।
केविन ब्राउन

2
एह, थोड़ा लंबा है।
इलेक्ट्रोबिट

1
Php में इस तरीके से html पार्स करने के लिए पूरी तरह से अनावश्यक है। php.net/manual/en/class.domdocument.php PHP में DOM को समझने की क्षमता है!
जेम्सह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.