我正在尝试从外部链接从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
类并将其存储到变量中,然后将其发送到我的数据库。
您可以使用 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'
我不确定您的问题是关于提取一个数值还是多个关于类名"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 标记匹配,因为它的文本由一个数字组成,即零。
如果执行 $matches
的 var_dump() ,则会产生以下结果:
array (size=2)
0 => string 'class="num_gain">0</' (length=20)
1 => string '0' (length=1)
第 0 个元素包含与正则表达式模式完全匹配的字符串,而下一个元素包含借助括号"记住"的模式部分。 因此,$matches[1]
包含要存储在数据库中的所需值。
如果您的问题实际上与访问类 DIV 标签中的数字数据有关num_gain那么您可以编写以下代码来使用 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',
)
需要注意的是,虽然网络抓取在技术上很容易做到,但您应该确保此活动在法律上是允许的。