1

我是 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€&lt;/b></a><div class=gh_hl1>
<b>510€&lt;/b></small></a><br clear=all><div class=gh_hl1>
<b>520€&lt;/b></a><div class=gh_hl1>
<b>530€&lt;/b></a><div class=gh_hl1>
<b>540€&lt;/b></a><div class=gh_hl1>
<b>550€&lt;/b></a><div class=gh_hl1>

它以<b>这个标签开始,以and结束,<div class=gh_hl1>还有</small></a><br clear=all><div class=gh_hl1>另一个标签以<b>

我想知道有没有可能采取这个价格?

我还看了 Simple HTML Dom Parser。但我什么也找不到。谢谢你的回答...

4

1 回答 1

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>/';
于 2013-01-09T23:12:35.903 回答