我是Php的新手,我想学习从其他网站获取信息的代码。我看了preg_match并爆炸了。
我的问题是我想要一些信息,但没有标签。
我将此代码用于此标记
$site=file_get_contents("$link");
$price='#<div class="price">(.*?)<\/div>#si';
preg_match_all($price,$site,$pricelist);
for ($a=0; $a<5; $a++){
echo $pricelist[1][$a];
}
但在源代码中它是这样的:
<b>500€</b></a><div class=gh_hl1>
<b>510€</b></small></a><br clear=all><div class=gh_hl1>
<b>520€</b></a><div class=gh_hl1>
<b>530€</b></a><div class=gh_hl1>
<b>540€</b></a><div class=gh_hl1>
<b>550€</b></a><div class=gh_hl1>
从<b>
此标记开始,它以<div class=gh_hl1>
和</small></a><br clear=all><div class=gh_hl1>
结束,还有另一个标记以<b>
开头
我想知道有没有可能拿这个价格?
我也看了Simple HTML Dom Parser。但我找不到任何东西。谢谢你的回答...
答案 0 :(得分:0)
好吧,你可以在HTML文件中查找模式。有一点值得注意的是€符号。你可以搜索一下。这个正则表达式应该这样做:
$price='/(\d*)€(\d*)/';
如果€符号在金额之前或之后(如果你们之后只做过,那么最后一次减去(\ d *))就应该抢价。
还有其他相似之处,例如粗体标签,因此您可以添加此标签以获得更多特异性:
$price='/<b>(\d*)€(\d*)</b>/';
那仍然是一个相当普通的字符串,真正将它们联系在一起的是最后的div
:<div class=gh_hl1>
。因此,您可以使用此正则表达式搜索,处理过程中的标记:
$price='/<b>(\d*)€(\d*)<\/b>(<\/small>)?<\/a>(<br clear=all>)?<div class=gh_hl1>/';
这是我的镜头。但这仍然是非常愚蠢的(如果它能在PHP中工作,我最近并不积极,最近主要做Ruby),所以让我们简化为:
$price='/<b>(\d*)€(\d*)<\/b>.*<\/a>.*<div class=gh_hl1>/';
现在我们将获得所有标签。如评论中所述,有一百万种更好的方法可以做到这一点,而<b>
标记上方的父项可能表明这是一个价格。寻找那些。
由于我们想要的主要内容是b标签之间的价格,并确保它以该类的div结束,我们可以制作正则表达式:
$price='/<b>(\d*)€(\d*)<\/b>.*<div class=gh_hl1>/';