使用php中的正则表达式从html页面获取数据

时间:2011-12-31 17:05:30

标签: php regex fetch

我试图通过使用正则表达式获取给定页面上的价格,但我用来存储获取内容的变量始终为空。有人可以帮我写出正确的正则表达式。

如果页面为:http://www.flipkart.com/mobiles/memory-cards/itmczcsrtvjeb6nr?pid=acccrrqzzsgnfgea&_l=sXQjsX87GxqrvKzhjuOrkw--&_r=n_2yuAC4xgh0SZTuulvAtw--&ref=af8ad0c4-62a2-4381-99d3-3ad8285e260b

我想从这里取价260.

标签页面的一些html代码:

<span id="fk-mprod-our-id" class="price final-price our fksk-our">Rs.<span class="small-font"> </span>260</span>

3 个答案:

答案 0 :(得分:2)

您可以使用simplehtmldom编写更多防弹解析器 - 请参阅http://simplehtmldom.sourceforge.net/。对我来说,从来没有解析过文档。

你最终会得到像这样的代码

<?php
include_once '/path/to/simplehtmldom/simple_html_dom.php';
$html = file_get_html('http://www.flipkart.com/mobiles/memory-cards/itmczcsrtvjeb6nr?pid=acccrrqzzsgnfgea&_l=sXQjsX87GxqrvKzhjuOrkw--&_r=n_2yuAC4xgh0SZTuulvAtw--&ref=af8ad0c4-62a2-4381-99d3-3ad8285e260b');
foreach ($html->find('span.final-price') as $element) {
    echo $element->plaintext;
}
//will output "Rs. 260", unless page changes

更清晰的代码,虽然与正则表达式相比是性能噩梦

答案 1 :(得分:0)

看起来这是唯一一次使用final-price类,所以这应该有效:

/final-price.+?>(\d+)</

答案 2 :(得分:0)

假设货币可能会根据IP /国家/地区而变化,我会使用爆炸(我不是很擅长正则表达式)

//consider that $html contains the page source
$html = explode('<span class="price final-price our fksk-our" id="fk-mprod-our-id">', $html);
$html = explode("</span>', $html[1]);
$price = $html[1];

我希望有所帮助。