0

下面是来自较大网站的一小段 html 代码。我正在尝试将该站点中的一些信息解析到数据库中。但是我不确定最佳实践是什么。我应该使用正则表达式还是可以使用 PHP DOM 解析器来获取相关数据。

例如。我想获取有关“Prisantydning”=> 2090000 和“Fellesformue”=>4483 和“verditakst”=>2300000 的信息

你有什么建议?

<div class="mod">
    <div class="inner">
        <div class="bd objectinfo" data-automation-id="information">
            <h2>Prisdetaljer</h2>
            <dl class="multicol colspan2 fleft mtn">

                    <dt>Prisantydning</dt>
                    <dd>2 090 000,-</dd>



            </dl>
            <dl class="multicol colspan2 fleft mlm mtn">

                    <dt>Fellesformue</dt>
                    <dd>4 483,-</dd>


                    <dt>Verditakst</dt>
                    <dd>
                            2 300 000,-
                        <button class="icon utility strong contrast helpButton"
                                data-helptext-id="Verditakst">?
                        </button>
                        <div id="Verditakst" class="helptext supportText">
                            Verditakst utføres av en autorisert takstmann, og er en teknisk vurdering av hva boligen er
                            verdt.
                            Dette samkjøres med meglers markedsvurdering.
                        </div>
                    </dd>


                    <dt>Låneverdi</dt>
                    <dd>
                            2 000 000,-
                        <button class="icon utility strong contrast helpButton"
                                data-helptext-id="Låneverdi">?
                        </button>
                        <div id="Låneverdi" class="helptext supportText">
                            Låneverdi er en vurdering av markedsverdi som skal gi banken den nødvendige sikkerhet for
                            pant i
                            eiendommen. Låneverdi ligger som oftest på 80 - 90% av verditakst.
                        </div>
                    </dd>
4

2 回答 2

0

“大型网站”通常意味着混乱和不可预测的代码。但即使情况并非如此,正则表达式也根本不用于评估 HTML 内容(除了少数非常简单的情况,这种行为可能是合理的)。所以是的,你应该在这里使用像DOMDocument这样的 DOM 解析器。

在这种情况下, DOMXpath也是一个不错的补充,因为它可以让您避免选择DOMDocument具有 DOMgetElementsByTagName等功能的节点的麻烦。

于 2012-12-23T11:01:24.493 回答
0

html不规则,所以使用正则表达式不是正确的方法,Barmar 是正确的

你可以这样使用 DOM:

$doc = new \DOMDocument();
$doc->loadHtmlFile($yourUrl);//needs ini option "allow_url_fopen" to be true
$datas = array();
foreach($doc->getElementsByTagName('dt') as $dt){
     //get the datas : $dt->textContent is the key
     //as a first approach we get the whole text value of the dd that is related
     $datas[$dt->textContent] = $dt->nextSibling->textContent ;
     //then we just get the figures
     $datas[$dt->textContent]=preg_replace('#[^0-9]+$#','',$datas[$dt->textContent]);
}
于 2012-12-23T10:54:25.320 回答