2010-12-12 8 views
21

, मैं एक नई कार्यक्षमता जोड़ना चाहता हूं।.html पृष्ठ से लिंक और शीर्षक निकालने का तरीका कैसे? मेरी वेबसाइट के लिए

मैं उपयोगकर्ता चाहते हैं (किसी भी ब्राउज़र यदि संभव हो तो से) अपने बुकमार्क बैकअप फ़ाइल अपलोड करने के लिए सक्षम होने के लिए चाहते हैं तो मैं उनके प्रोफ़ाइल पर अपलोड कर सकते हैं और वे उन्हें मैन्युअल के सभी सम्मिलित करने के लिए नहीं है ...

एकमात्र ऐसा हिस्सा जिसे मैं ऐसा करने के लिए याद कर रहा हूं, यह अपलोड की गई फ़ाइल से शीर्षक और यूआरएल निकालने का हिस्सा है .. क्या कोई भी सुराग दे सकता है कि कहां से शुरू किया जाए या कहां पढ़ा जाए?

इस्तेमाल किया खोज विकल्प और (how to extract data from a raw html file) इस सीस मेरा है और यह इस बारे में बात नहीं कर रहा है के लिए सबसे संबंधित सवाल ..

अपने jQuery या php

धन्यवाद का उपयोग कर अगर मैं वास्तव में कोई आपत्ति नहीं है

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('a') as $node) 
{ 
    echo $node->nodeValue.': '.$node->getAttribute("href")."\n"; 
} 
+1

यह शायद हर किसी को मदद करता है, तो आप बुकमार्क बैकअप फ़ाइलों के प्रकार के उदाहरण प्रस्तुत सकता है आप (प्रत्येक ब्राउज़र के लिए) का समर्थन करना चाहते हैं – scoates

+1

नेटस्केप प्रारूप आम है: http://msdn.microsoft.com/en-us/library/aa753582(v=vs.85).aspx – Matthew

उत्तर

43

आप हर किसी को धन्यवाद, मैं समझ गया!

अंतिम कोड: यह आपको लंगर पाठ सौंपा और एक .html फ़ाइल

$html = file_get_contents('bookmarks.html'); 
//Create a new DOM document 
$dom = new DOMDocument; 

//Parse the HTML. The @ is used to suppress any parsing errors 
//that will be thrown if the $html string isn't valid XHTML. 
@$dom->loadHTML($html); 

//Get all links. You could also use any other tag name here, 
//like 'img' or 'table', to extract other tags. 
$links = $dom->getElementsByTagName('a'); 

//Iterate over the extracted links and display their URLs 
foreach ($links as $link){ 
    //Extract and show the "href" attribute. 
    echo $link->nodeValue; 
    echo $link->getAttribute('href'), '<br>'; 
} 

फिर में सभी लिंक के लिए href, बहुत बहुत शुक्रिया पता चलता है।

$content = file_get_contents('bookmarks.html'); 

भागो इस:

30

यह शायद पर्याप्त है o एक HTML पार्सर का उपयोग करें जैसे PHP Simple HTML DOM Parser (कभी इसे स्वयं नहीं किया)। (दूसरा विकल्प मूल स्ट्रिंग खोज या regexp का उपयोग करके खोजना है, और आपको शायद कभी HTML को पार्स करने के लिए regexp का उपयोग करना चाहिए)। ट्यूटोरियल से

:

पार्सर उपयोग यह कार्यों है a टैग लगाने के लिए का उपयोग कर html फ़ाइल को पढ़ने के बाद

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 
+2

$ html है यह फ़ाइल का पथ है? इस तरह के त्वरित उत्तर के लिए धन्यवाद: डी –

+2

@ टोनी, '$ html' HTML युक्त स्ट्रिंग है। आप फ़ाइल से सीधे लोड करने के लिए '$ dom-> loadHTMLFile()' का उपयोग कर सकते हैं। (आप चेतावनियों को दबाने के लिए इसे '@' के साथ उपसर्ग करना चाहते हैं।) – Matthew

+0

वाह! आपका बहुत बहुत धन्यवाद! ऐसा लगता है कि यह लगभग पूरा हो गया है! मुझे लिंक मिल सकते हैं लेकिन मुझे नाम या शीर्षक के साथ परेशानी हो रही है (मैंने दोनों कोशिश की) –

5

संग्रहीत लिंक मान लिया जाये कि एक html में सबसे अच्छा समाधान दायर कर रहे हैं शायद है टी: आपका बहुत-बहुत

3

यह एक उदाहरण है, तो आप अपने मामले में इसका उपयोग कर सकते

<?php 

$content = '<html> 

<title>Random Website I am Crawling</title> 

<body> 

Click <a href="http://clicklink.com">here</a> for foobar 

Another site is http://foobar.com 

</body> 

</html>'; 

$regex = "((https?|ftp)\:\/\/)?"; // SCHEME 
$regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?"; // User and Pass 
$regex .= "([a-z0-9-.]*)\.([a-z]{2,4})"; // Host or IP 
$regex .= "(\:[0-9]{2,5})?"; // Port 
$regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path 
$regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query 
$regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor 


$matches = array(); //create array 
$pattern = "/$regex/"; 

preg_match_all($pattern, $content, $matches); 

print_r(array_values(array_unique($matches[0]))); 
echo "<br><br>"; 
echo implode("<br>", array_values(array_unique($matches[0]))); 

आउटपुट:

Array 
(
    [0] => http://clicklink.com 
    [1] => http://foobar.com 
) 

http://clicklink.com

http://foobar.com

1
$html = file_get_contents('your file path'); 

$dom = new DOMDocument; 

@$dom->loadHTML($html); 

$styles = $dom->getElementsByTagName('link'); 

$links = $dom->getElementsByTagName('a'); 

$scripts = $dom->getElementsByTagName('script'); 

foreach($styles as $style) 
{ 

    if($style->getAttribute('href')!="#") 

    { 
     echo $style->getAttribute('href'); 
     echo'<br>'; 
    } 
} 

foreach ($links as $link){ 

    if($link->getAttribute('href')!="#") 
    { 
     echo $link->getAttribute('href'); 
     echo'<br>'; 
    } 
} 

foreach($scripts as $script) 
{ 

     echo $script->getAttribute('src'); 
     echo'<br>'; 

} 
+0

स्टाइल विफल रहा और उत्तर पढ़ने के लिए मुश्किल है। कृपया अपना उत्तर संपादित करें और इसे और अधिक पठनीय बनाने के लिए – michaldo

+1

दिए गए प्रश्न के लिए बहुत अधिक कोड ... –