2012-01-02 42 views
0

我正在开展一个个人项目,获取当地气象站的学校/商业关闭内容,并将结果显示在我的个人网站上。由于该网站没有使用RSS提要(可惜),我正在考虑使用PHP刮取页面内容,但我只想显示某个ID元素。这可能吗?只能用PHP网页抓取显示某个ID?

我的PHP代码,

<?php 
$url = 'http://website.com'; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 
echo $output; 
?> 

我想用preg_match的,但我不知道语法或如果这是即使正确的命令。我想显示的ID元素是#LeftColumnContent_closings_dg

+2

DOM解析通常被接受为解析正则表达式以上HTML/XML内容的首选方式。您将希望通过xpath查询使用PHP的DOMDocument来提取您正在查找的特定位信息。 – rdlowrey 2012-01-02 19:56:03

+0

@MarcB OMG,这是upvotes的母亲。 Canonical是正确的词... – rdlowrey 2012-01-02 20:02:24

+0

@rdlowrey:它已经到了这样的地步,任何涉及html +正则表达式的问题都应该被自动关闭并指向该答案。 – 2012-01-02 20:03:17

回答

2

这里是一个使用DOMDocument的例子。它拉从用id =“测试”第一<h1>元素中的文本...

$html = ' 
<html> 
<body> 
<h1 id="test">test element text</h1> 
<h1>test two</h1> 
</body> 
</html> 
'; 

$dom = new DOMDocument; 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 
$res = $xpath->query('//h1[@id="test"]'); 
if ($res->item(0) !== NULL) { 
    $test = $res->item(0)->nodeValue; 
} 
1

我使用过的这种类型的东西很成功的库是PHPQuery:http://code.google.com/p/phpquery/

你基本上得到您的网站转换成字符串(如你有以上),然后执行:

phpQuery::newDocument($output); 

$titleElement = pq('title'); 
$title = $titleElement->html(); 

例如 - 这将拿到冠军元素的内容。好处是,所有的方法都是以jQuery的名字命名的,如果你已经了解jQuery,学习起来很容易。