-3

サイトのリンクテキスト、つまりSCRAPETHISをスクレイプしようとしています。ページ上のすべてのリンクに対してこれを実行したいと思います。これまでのところ私はこれを持っています:

<?php

$target_url = "SITE I WANT TO SCRAPE";

// make the cURL request to $target_url
$ch = curl_init();
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->evaluate("/html/body//a/text()");

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

私はこのようなものにかなり慣れていません、そして私が間違っていることを理解することができませんか?

ありがとう!

4

2 に答える 2

2

forループで$hrefは、は文字列ではありません。これは実際にはDOMTextノードです。文字列として使用するには、そのnodeValueプロパティにアクセスする必要があります。

for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    echo "<br />Link stored: $href->nodeValue";
}
于 2012-08-23T20:41:06.040 に答える
1

試す:

$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a/text()");

for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i)->textContent;
    echo "<br />Link stored: $href";
}
于 2012-08-23T20:43:12.263 に答える