0


他のウェブサイトからいくつかの要素のコンテンツを抽出するために、PHPでいくつかのコードを作成しました。これらの要素はXPathによってアドレス指定されます。これらのコードは、一方のWebサイトでは正常に機能しましたが、もう一方のWebサイトでは失敗しました。したがって、コード全体が間違っているわけではないと確信しています。
ちなみに、Firefoxで「要素の検査」を使用して要素のXPathアドレスを抽出し、要素を右クリックして「XPathのコピー」を選択しました。

2番目のWebサイトの何が問題になっていますか?

ありがとう

コードは次のとおりです。

//MyCode.PHP
<html>
<head>
<title>This is the title</title>
</head>
<body>

<?php 

class EmDIV
{
    public $url="";
    public $content="";
    public $name="";
    public $query="";
    public function EmDIV($CdivName,$Curl,$CQuery)
    {
        $this->name=$CdivName;
        $this->url=$Curl;
        $this->query=$CQuery;
        $html = new DOMDocument();
        @$html->loadHtmlFile($this->url);

        $bodies = $html->getElementsByTagName('body');
        assert($bodies->length === 1);
        $body = $bodies->item(0);
        $xpath = new DOMXPath( $html );
        $nodelist = $xpath->query($this->query);
        //echo @$body->saveHTML();
        if($nodelist->length==1)
        {
            $this->content=$nodelist->item(0)->textContent;
            //sanitizing
            //$this->content=Jsoup.clean($this->content, Whitelist.basic());
        }
        //echo $nodelist->item(0)->nodeName;        
        foreach ($nodelist as $node) 
            echo $node->getNodePath()."\n";     
    }
}

$emdiv=array(
//new EmDIV('parsmalaysia','http://www.parsmalaysia.com/exchange.html','/html/body/div/div[5]/div/div/div/div/div/div/div/div/div/div/table/tbody/tr/td[4]/text()'),
new EmDIV('atlas-exchange','http://atlas-exchange.com/','/html/body/div/div/table/tr/td/table/tr/td/div/div[10]/div/div/div/table/tr[3]/td[2]/text()'),
new EmDIV('usunmalaysia','http://www.usunmalaysia.com/Home.aspx','/html/body/form/table/tbody/tr[3]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[4]/td/table/tbody/tr/td/table/tbody/tr/td[2]/div/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr[3]/td/table/tbody/tr[4]/td[2]/text()'),
);
?>

<table border="1">
<tr>
<td>Site</td>
<td>RM Price</td>
</tr>
    <?php
        foreach ($emdiv as $ed) 
        {
            echo "<tr>";
            echo "<td>".$ed->name."</td>";
            echo "<td>".$ed->content."</td>";
            echo "</tr>";
        }
    ?>
</table> 

</body>
</html>
4

1 に答える 1

0

2ページ目には、tbody要素はありません。パスからすべてのtbody要素を削除する必要があります。Firefoxは、テーブルの内部構造の一部であるためtbody要素を表示しますが、取得するマークアップには含まれていません。

于 2012-05-13T21:51:06.607 に答える