2

わかりました、私はこのようなhtmlファイルを持っているとしましょう。。。

<div class="vad buttonDiv" onclick="location.href='http://example.htm?some/link&id=1357900324528'">
<div class="vad buttonDiv" onclick="other('example')">
<div class="vad buttonDiv" onclick="location.href='http://example.htm?some/link&id=7458758375733'">
<div class="vad buttonDiv" onclick="other('example1')">
<div class="vad buttonDiv" onclick="location.href='http://example.htm?some/link&id=3474537737392'">
<div class="vad buttonDiv" onclick="other('example2')">

私がやりたいのは、外部のhtmlページからそれらだけを表示したいそれぞれのためにhttp://example.htm?some/link&id=**************私は以下のコードを試しました

$dom = new DOMDocument();
@$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$onclicks = $xpath->evaluate("/html/body//div");

for ($i = 0; $i < $onclicks->length; $i++) {
    $onclick = $onclicks->item($i);
    $display = $onclick->getAttribute("onclick");
    echo $display."<br>";
}

そしてそれはこれを取得します

location.href='http://example.htm?some/link&id=1357900324528'
other('example')

location.href='http://example.htm?some/link&id=7458758375733
other('example1')

location.href='http://example.htm?some/link&id=3474537737392
other('example2')

クリックコンテンツの両方ではなく、私が求めているものをどのように取得するかについてのアイデアは、どんな答えでも大歓迎です。

4

4 に答える 4

2

あなたは成功にとても近いです...

ウィキペディアでXPathを数分間学習した後、次のように機能するxpathを思いつきました。

$html=<<<TEXT
<html>
<body>
<div>
<div class="vad buttonDiv" onclick="location.href='http://example.htm?some/link&id=1357900324528'"></div>
<div class="vad buttonDiv" onclick="other('example')"></div>
<div class="vad buttonDiv" onclick="location.href='http://example.htm?some/link&id=7458758375733'"></div>
<div class="vad buttonDiv" onclick="other('example1')"></div>
<div class="vad buttonDiv" onclick="location.href='http://example.htm?some/link&id=3474537737392'"></div>
<div class="vad buttonDiv" onclick="other('example2')"></div>
</div>
</body>
</html>
TEXT;
$dom=new DOMDocument();
@$dom->loadHTML($html);
$xpath=new DOMXPath($dom);
$divs=$xpath->evaluate("/html/body//div[starts-with(@onclick,'location')]");
foreach(range(0,$divs->length-1) as $i)
{
    var_dump($divs->item($i)->getAttribute("onclick"));
}

上記のコードは次のように出力します。

string(61) "location.href='http://example.htm?some/link&id=1357900324528'"
string(61) "location.href='http://example.htm?some/link&id=7458758375733'"
string(61) "location.href='http://example.htm?some/link&id=3474537737392'"
于 2013-01-11T12:06:09.537 に答える
2

解析されたWebサイトのHTMLエラーで最終的に失敗する複雑なDOM解析の代わりに、preg_match_allを使用します。

これはおそらくより速く、はるかに簡単です

if ( preg_match_all( '/onclick="(location\\.href=([^"]+))"/i', $html, $matches ) )
{
    print_r( $matches );
}

ここに画像の説明を入力してください

于 2013-01-11T11:45:15.693 に答える
2
$url= "http://example.com";
$dom = new DOMDocument();
@$dom->loadHTML($url);
$xpath = new DOMXPath($dom);

$PATH = $xpath->evaluate('/html/body//div[@class="vad buttonDiv"]');
for ($i = 0; $i < $PATH->length; $i++) {
    $lmao = $PATH->item($i);

$answer = $lmao->getAttribute('onclick');
$searchArray = array( "location.href='", "'");
$replaceArray = array( "", "");
$link = str_replace($searchArray, $replaceArray, $answer);
echo $link."<br>"
}

ディスプレイは単なるリンクです。

于 2013-02-16T00:30:55.863 に答える
1

簡単な解決策:

for ($i = 0; $i < $onclicks->length; $i++) {
    $onclick = $onclicks->item($i);
    $display = $onclick->getAttribute("onclick");
    if(substr($display, 0, 8) == 'location'){
        $display = str_replace(array("location.href='", "'"), '', $display);
        echo $display."<br>";
    }

}
于 2013-01-11T11:44:28.280 に答える