3

私はphpWebスクレイピングを使用しており、日曜日の価格(3.65)を以下のhtmlコードから取得したいと思います。

     <tr class="odd">
       <td >
           <b>Sunday</b> Info
           <div class="test">test</div>
       </td>
       <td>
       &euro; 3.65 *

       </td>
    </tr>

しかし、これを行うのに最適な正規表現が見つかりません...私はこのphpコードを使用します:

    <?php
        $data = file_get_contents('http://www.test.com/');

        preg_match('/<tr class="odd"><td ><b>Sunday</b> Info<div class="test">test<\/div><\/td><td>&euro; (.*) *<\/td><\/tr>/i', $data, $matches);
        $result = $matches[1];
    ?>

しかし、結果はありません...正規表現の何が問題になっていますか?(新しい行/スペースのせいだと思いますか?)

4

5 に答える 5

6

正規表現は使用しないでください。HTMLは正規表現ではありません。

代わりに、のようなDOMツリーパーサーを使用してDOMDocumentください。これdocumentationはあなたを助けるかもしれません。

/s私は試していませんが、スイッチは元の正規表現で役立つはずです。

于 2012-08-06T11:30:59.583 に答える
3

問題は、タグ間のスペースです。改行、タブ、スペースがあります。

あなたの正規表現はそれらと一致しません。

また、マルチライン用にpreg_matchを設定する必要があります。

スクレイピングにはxpathを使用する方が簡単だと思います。

于 2012-08-06T11:31:29.750 に答える
2

改行を''に置き換えてから、正規表現を再度実行してください。

于 2012-08-06T11:33:36.757 に答える
1

この方法で試してください:

$uri = ('http://www.test.com/');
$get = file_get_contents($uri);

$pos1 = strpos($get, "<tr class=\"odd\"><td ><b>Sunday</b> Info<div class=\"test\">test</div></td><td>&euro;");
$pos2 = strpos($get, "*</td></tr>", $pos1);
$text = substr($get,$pos1,$pos2-$pos1);
$text1 = strip_tags($text);
于 2017-03-23T10:44:51.660 に答える
0

PHPDOMDocumentオブジェクトの使用。WebページからHTMLDOMデータを解析します

    $dom = new DOMDocument();
    $dom->loadHTML($data);

    $trs = $dom->getElementsByTagName('tr'); // this gives us all the tr elements on the webpage

    // loop through all the tr tags
    foreach($trs as $tr) {
        // until we get one with the class 'odd' and has a b tag value of SUNDAY
        if ($tr->getAttribute('class') == 'odd' && $tr->getElementsByTagName('b')->item(0)->nodeValue == 'Sunday') {
            // now set the price to the node value of the second td tag
            $price = trim($tr->getElementsByTagName('td')->item(1)->nodeValue);
            break;
        }

    }

WebスクレイピングにDOMDocumentを使用する代わりに、少し面倒です。オープンソースのSimpleHtmlDomParserを手に入れることができます。

于 2017-09-15T04:22:53.507 に答える