从外部文件php获取Div

时间:2014-12-27 22:55:22

标签: php

我正在尝试从外部链接获取div类的信息 我怎么能这样做?

<div class="item-list"><h3>répartitions des gains</h3><ul id="partages" class="partages-gain"><li class="partage_header first"><div class="part_label">Combinez :</div><div class="num_gain">Nombre de gains</div><div class="lots">Lot (Rs)</div></li>
<li class="partage_number"><div class="part_label">6 des 6</div><div class="num_gain">0</div><div class="lots">0</div></li>
<li class="partage_number"><div class="part_label">5 des 6</div><div class="num_gain">59</div><div class="lots">11 776</div></li>
<li class="partage_number"><div class="part_label">4 des 6</div><div class="num_gain">3 093</div><div class="lots">463</div></li>
<li class="partage_number"><div class="part_label">3 des 6</div><div class="num_gain">48 021</div><div class="lots">100</div></li>
<li class="partage_total last"><div class="part_label">Total</div><div class="num_gain">51 173</div><div class="lots">6 928 943</div></li>
</ul></div>  </div>

以上是外部链接源代码 我试图在num_gain中找到0,但有5 num_gain类,并将其存储到变量中,然后将其发送到我的数据库。

2 个答案:

答案 0 :(得分:1)

您可以使用DOMDocumentDOMXpath来执行此操作我编写此函数以从类名称中获取返回数组的内容

function getContentByClassName($html, $classname) {
     $content = array();
     $dom = new DomDocument();
     @$dom->loadHTML($html);
     $finder = new DomXPath($dom);

     $nodes = $finder->query("//*[contains(@class, '$classname')]");

     foreach($nodes as $node){
        $content[] = $node->nodeValue;
     }
     return $content;
}

用法

$html = file_get_contents('your external link');
$class = 'num_gain';
var_dump(getContentByClassName($html, $class));

输出

array (size=6)
  0 => 'Nombre de gains' 
  1 => '0' 
  2 => '59'
  3 => '3 093'
  4 => '48 021'
  5 => '51 173'

答案 1 :(得分:0)

我不确定你的问题是否要求提取一个数字值或多个关于classname“num_gain”的div标签的数值。所以,我为每种可能性提供了答案,如下:

如果你想在“num_gain”div标签中提取零,我建议使用以下代码:

<?php
$html = file_get_contents("http://www.example.com/page_with_divs.html");
preg_match("/class=\"num_gain\">([0-9])<\//",$html,$matches);
$result = $matches[1]; // 0

注意,变量赋值是可选的。我赞成它主要是为了代码易读性。

代码使用带有正则表达式的 preg_match()。正则表达式模式排除与第一个num_gain DIV的匹配,因为它包含非数字数据,即“Nombre de gain”。该模式与下一个指定的DIV标记匹配,因为它的文本由一个数字组成,即零。

如果你执行$matches的var_dump(),它会产生以下结果:

  array (size=2)
    0 => string 'class="num_gain">0</' (length=20)
    1 => string '0' (length=1)

第0个元素包含与正则表达式模式完全匹配的字符串,而下一个元素包含借助括号“记住”的模式部分。因此,$matches[1]包含要存储在数据库中的所需值。

如果您的问题实际上与访问num_gain类DIV标记中的数字数据有关,那么您可以编写以下代码,该代码使用 preg_match_all()

<?php
$html = file_get_contents("http://www.example.com/page_with_divs.html");
preg_match_all("/class=\"num_gain\">([0-9][0-9 ]*)<\//",$html,$matches);

matches[1]现在包含以下数组:

array (
  0 => '0',
  1 => '59',
  2 => '3 093',
  3 => '48 021',
  4 => '51 173',
)

请注意,虽然网络抓取在技术上很容易,但您应确保此活动在法律上是允许的。