我正在尝试从外部链接获取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
类,并将其存储到变量中,然后将其发送到我的数据库。
答案 0 :(得分:1)
您可以使用DOMDocument和DOMXpath来执行此操作我编写此函数以从类名称中获取返回数组的内容
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',
)
请注意,虽然网络抓取在技术上很容易,但您应确保此活动在法律上是允许的。