2014-12-27 76 views
1

我想从外部链接的div类获取信息 我该怎么做?从外部文件获取Div php

<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获得例如但5num_gain类并将其存储到一个变量,然后将它发送到我的数据库。

+1

你想要检索什么信息? –

+1

考虑使用http://php.net/manual/en/class.domdocument.php处理来自外部网站的html文档。 – Erik

+0

使用dom解析器。见[this](http://php.net/manual/en/class.domdocument.php)和[this](http://php.net/manual/en/book.simplexml.php) – andrew

回答

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' 
0

类的名称内容我不确定您的问题是否提取了一个数字值lue或多个关于类名“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 gains”。该模式与下一个指定的DIV标签匹配,因为其文本由一个数字组成,即零。

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

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

的零元素包含匹配的正则表达式模式正好而下一元素包含图案的部分字符串在括号的帮助下被“记住”。因此,$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', 
) 

小心的词,而网页抓取在技术上是很容易做到,你应该确保该活动是法律允许的。