题
我正在尝试为一些朋友创建一个简单的警报应用程序。
基本上,我希望能够从像“效果”这样的网页中提取数据“价格”和“股票可用性”:
- http://www.sparkfun.com/commerce/product_info.php?products_id=5
- http://www.sparkfun.com/commerce/product_info.php?products_id=9279
我已经通过电子邮件和短信部分发出了警报,但是现在我希望能够从网页(那两个或任何其他网页)中获取数量和价格,以便我可以比较可用的价格和数量并提醒我们如果产品在某些阈值之间,则下订单。
我尝试过一些正则言语(在一些教程中找到,但我也是如此的N00B),但是没有设法获得此工作,有什么好提示或示例吗?
解决方案
$content = file_get_contents('http://www.sparkfun.com/commerce/product_info.php?products_id=9279');
preg_match('#<tr><th>(.*)</th> <td><b>price</b></td></tr>#', $content, $match);
$price = $match[1];
preg_match('#<input type="hidden" name="quantity_on_hand" value="(.*?)">#', $content, $match);
$in_stock = $match[1];
echo "Price: $price - Availability: $in_stock\n";
其他提示
如果您需要Google为此,则称为屏幕刮擦。
我建议您改用DOM解析器和XPATH表达式。首先通过HTMLTIDY喂食HTML,以确保其有效标记。
例如:
$html = file_get_contents("http://www.example.com");
$html = tidy_repair_string($html);
$doc = new DomDocument();
$doc->loadHtml($html);
$xpath = new DomXPath($doc);
// Now query the document:
foreach ($xpath->query('//table[@class="pricing"]/th') as $node) {
echo $node, "\n";
}
第一,问这个问题太细节了。第二,从网站上提取数据可能不是合法的。但是,我有提示:
使用Firebug或Chrome/Safari检查员探索有趣信息的HTML内容和模式
测试您的正则表达式以查看是否比赛。您可能需要多次进行(多通解析/提取)
通过卷曲或更简单编写客户
对我来说,我最好使用整齐地转换为有效的XHTML,然后使用XPath提取数据而不是Regex。为什么?因为XHTML不是规则的,并且XPATH非常灵活。您可以学习XSLT进行转换。
祝你好运!
您可能最好将HTML代码加载到DOM解析器中 这个 并搜索“定价”表。但是,每当更改页面布局时,您所做的任何刮擦都可以破坏,并且未经他们的同意而可能是非法的。
不过,最好的方法是与运行该网站的人交谈,并查看他们是否有替代,更可靠的数据传输形式(Web服务,RSS或数据库导出)。
从网站提取数据的最简单方法。我分析了我的所有数据仅在标签中介绍,因此我已经准备好了。
<?php
include(‘simple_html_dom.php’);
// Create DOM from URL, paste your destined web url in $page
$page = ‘http://facebook4free.com/category/facebookstatus/amazing-facebook-status/’;
$html = new simple_html_dom();
//Within $html your webpage will be loaded for further operation
$html->load_file($page);
// Find all links
$links = array();
//Within find() function, I have written h3 so it will simply fetch the content from <h3> tag only. Change as per your requirement.
foreach($html->find(‘h3′) as $element)
{
$links[] = $element;
}
reset($links);
//$out will be having each of HTML element content you searching for, within that web page
foreach ($links as $out)
{
echo $out;
}
?>
不隶属于 StackOverflow