मैं "के प्रयास में" कर रहा हूँ एक वेब पेज पृष्ठ के भीतर निम्नलिखित संरचनाओं है कि स्क्रैप करने का:कर्ल का उपयोग कर पृष्ठ से वास्तविक HTML को कैसे पार्स करें?
<p class="row">
<span>stuff here</span>
<a href="http://www.host.tld/file.html">Descriptive Link Text</a>
<div>Link Description Here</div>
</p>
मैं कर्ल का उपयोग कर वेबपेज scraping कर रहा हूँ:
<?php
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, "http://www.host.tld/");
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($handle);
curl_close($handle);
?>
मैं कुछ शोध किया और पाया है कि मुझे कर्ल से वापस आने वाले HTML को पार्स करने के लिए RegEx का उपयोग नहीं करना चाहिए, और मुझे PHP DOM का उपयोग करना चाहिए।
$newDom = new domDocument;
$newDom->loadHTML($html);
$newDom->preserveWhiteSpace = false;
$sections = $newDom->getElementsByTagName('p');
$nodeNo = $sections->length;
for($i=0; $i<$nodeNo; $i++){
$printString = $sections->item($i)->nodeValue;
echo $printString . "<br>";
}
अब मैं नाटक नहीं कर रहा हूँ कि मैं पूरी तरह से इस बात को समझ, लेकिन मैं सार मिलता है, और मैं वर्गों मैं चाहता हूँ मिलता है: यह मैं यह कैसे किया गया है। एकमात्र मुद्दा यह है कि मुझे जो मिलता है वह केवल HTML पृष्ठ का पाठ है, जैसे कि मैंने इसे अपनी ब्राउज़र विंडो से कॉपी किया था। क्या मैं चाहता हूँ वास्तविक HTML है, क्योंकि मैं लिंक निकालने के लिए चाहते हैं और उन्हें भी उपयोग करते हैं, तो जैसे:
for($i=0; $i<$nodeNo; $i++){
$printString = $sections->item($i)->nodeValue;
echo "<a href=\"<extracted link>\">LINK</a> " . $printString . "<br>";
}
आप देख सकते हैं, मैं लिंक क्योंकि मैं केवल पाठ की हो रही है नहीं मिल सकता है वेबपृष्ठ और स्रोत, जैसा कि मैं चाहता हूं। मुझे पता है कि "curl_exec" HTML को खींच रहा है क्योंकि मैंने बस कोशिश की है, इसलिए मुझे विश्वास है कि डोम किसी भी तरह से HTML को अलग कर रहा है जिसे मैं चाहता हूं।
तुम भी 'का उपयोग कर' for' छोरों के बजाय foreach' नोड पर पुनरावृति कर सकते हैं। इससे यह अधिक कॉम्पैक्ट और समझदार हो जाएगा, क्योंकि आपको वास्तव में किसी भी सूचकांक की आवश्यकता नहीं है (प्रतीत होता है)। – janmoesen