/ / PHP कर्ल के साथ स्क्रैपिंग - मैं डीबग कैसे कर सकता हूं - php, कर्ल, स्क्रीन-स्क्रैपिंग

कर्ल के साथ PHP स्क्रैपिंग - मैं डीबग कैसे कर सकता हूं - PHP, कर्ल, स्क्रीन-स्क्रैपिंग

मैंने अभी सीखा है कि स्क्रैपिंग और क्यूआरएल क्या हैघंटे पहले, और तब से मैं उसी के साथ खेल रहा हूं। फिर भी, मैं अब कुछ अजीब का सामना कर रहा हूं। यहां नीचे दिए गए कोड कुछ साइटों के साथ ठीक काम करते हैं और दूसरों के साथ नहीं (बेशक मैंने url और xpath को संशोधित किया है ...)। ध्यान दें कि मेरे पास कोई त्रुटि नहीं है जब मैं परीक्षण करता हूं कि क्या कर्ल_एक्सेस को ठीक से निष्पादित किया गया था। तो समस्या के बाद कहीं से आना चाहिए। मेरे कुछ प्रश्न इस प्रकार हैं:

  1. यदि नया DOMDocument ठीक से बनाया गया है तो मैं कैसे जांच सकता हूं: अगर (??)
  2. अगर HTML के साथ नए DOMDocument को अच्छी तरह से आबाद किया गया है तो मैं कैसे जांच सकता हूं
  3. ... यदि एक नया DOMXPath ऑब्जेक्ट बनाया गया है?

आशा है कि मैं स्पष्ट था। आपके उत्तर के लिए अग्रिम धन्यवाद। चीयर्स। न घुलनेवाली तलछट

मेरी php:

<?php
$target_url = "http://www.somesite.com";
$userAgent = "Googlebot/2.1 (http://www.googlebot.com/bot.html)";

// make the cURL request to $target_url
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html= curl_exec($ch);

if (!$html) {
echo "<br />cURL error number:" .curl_errno($ch);
echo "<br />cURL error:" . curl_error($ch);
exit;
}

// parse the html into a DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($html);

// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->query("somepath");

for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute("href");
echo "<br />Link: $url";
}

?>

उत्तर:

जवाब के लिए 2 № 1

दस्तावेज़ ऑब्जेक्ट की जाँच करने के लिए एक कोशिश / पकड़ का उपयोग करेंबनाया गया था, तो HTML को दस्तावेज़ में लोड किया गया था, यह निर्धारित करने के लिए लोड HTML () के रिटर्न मान की जांच करें। आप XPath ऑब्जेक्ट पर एक कोशिश / पकड़ का उपयोग कर सकते हैं।

try
{
$dom = new DOMDocument();

$loaded = $dom->loadHTML($html);

if($loaded)
{
// loaded OK
}
else
{
// could not load HTML
}
}
catch(Exception $e)
{
// document could not be created, see $e->getMessage()
}

जवाब के लिए 0 № 2

समस्या सुलझ गयी। फायरबग से त्रुटि हुई जिसने गलत रास्ता दिया। MrCode को उनके समर्थन के लिए बड़ा धन्यवाद ...