1

ウェブサイトが彼のAPIへのアクセスを私に与えるまで、私はこのウェブサイトから2つのものだけを表示する必要があります:

取得したいもの //ライブページの例

これらの2つのものはdivに含まれています:

<div style="float: right; margin: 10px;">
here what i want to display on my website
</div>

問題は、stackoverflowで例を見つけたのですが、これまでpreg_matchを書いたことがないということです。取得したいデータでこれを行う方法は?ありがとうございました

<?php   $html = file_get_contents($st_player_cv->getUrlEsl());

preg_match_all(
    'What do i need to write here ?',
    $html,
    $posts, // will contain the data
    PREG_SET_ORDER // formats data into an array of posts
);

foreach ($posts as $post) {
    $premium = $post[1];
    $level = $post[2];

    // do something with data
}
4

3 に答える 3

3

それを行うためのDOMの方法は

libxml_use_internal_errors(TRUE);
$dom = new DOMDocument;
$dom->loadHTMLFile('http://www.esl.eu/fr/player/5178309/');
libxml_clear_errors();

$xPath = new DOMXPath($dom);
$nodes = $xPath->query('//div[@style="float: right; margin: 10px;"]');
foreach($nodes as $node) {
    echo $node->nodeValue, PHP_EOL;
}

しかし、ページがロードされた後にDOMを大幅に変更するJavaScriptがページにたくさんあります。PHPスクリプトベースのフェッチではJavaScriptが実行されないため、XPathで検索するスタイルはまだ存在せず、結果も得られません(Hannesが提案する正規表現は同じ理由で機能しません)。バッジのレベル番号もまだ存在しません。

Wrikkenがコメントで指摘したように、特定のリクエストをブロックするメカニズムもあるようです。私は一度メッセージを受け取りましたが、何度かページをフェッチすることもできたので、何がそれをトリガーするのかわかりません。

長い話を短くすると、このページでやろうとしていることを達成することはできません。

于 2010-09-30T15:42:29.937 に答える
1

より一般的なものが必要な場合

  preg_match('/<div[^>]+?>(.*?)<\/div>/', $myhtml, $result);
  echo $result[1] . "\n";

$myhtml分析する必要のあるコードhtmlが含まれています。$result正規表現が適用された後のregexpと()contentを含む配列です。$result[1]との間にあるものを提供<div ... >します</div>

このように、<div異なる場合(クラス名の変更または異なる属性)でも、引き続き機能します。

于 2010-09-30T15:37:41.163 に答える
1

この正規表現'#<div style="float: right; margin: 10px;">(.*)</div>#'でうまくいくはずですが(ええ)、DOMとXPathを使用することをお勧めします。

編集:

Xpath/DOMの例を次に示します。

$html = <<<HTML
<html>
<body>
    <em>nonsense</em>
    <div style="float: right; margin: 10px;"> here what i want to display on my website </div>
    <div> even more nonsense </div>
</body>
</html>

HTML;

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$elements = $xpath->query('//div[@style="float: right; margin: 10px;"]');
echo $elements->item(0)->nodeValue;
于 2010-09-30T15:23:25.407 に答える