使用正则表达式获取内容页面

时间:2011-04-21 08:30:30

标签: php

<?php
$source='http://www.google.com/finance';
//$source='sample.txt';
$page_all = file_get_contents($source);
$div_array=array();
preg_match_all('#<div id="markets">(.*?)</div>#sim', $page_all, $div_array);
//print_r($div_array);
print_r($div_array[1]);
?>

我有这段代码。我试图从google / finance返回特定div的内容。

所有我最终都在屏幕上虽然是数组()

任何想法。

此致

2 个答案:

答案 0 :(得分:1)

不要将regex用于此类事情,请尝试使用SimpleHTMLDom等DOM解析器。

<?php 
require_once('simple_html_dom.php');
echo file_get_html('http://www.google.com/finance')->find('#markets', 0);
?>

是的......就这么简单:)

编辑:

回应你的评论,看看SimpleHTMLDom的精彩内容:

<?php 
require_once('simple_html_dom.php');

$html = file_get_contents('http://www.google.com/finance');
$tidy = tidy_parse_string($html);
$tidy->cleanRepair();
$html = str_get_html((string)$tidy);

foreach($html->find('#markets .quotes', 0)->find('tr') as $line) {
    printf("%s - %s - %s %s<br />", 
        $line->find('.symbol a', 0)->innertext,
        $line->find('.price span', 0)->innertext,
        $line->find('.change span', 0)->innertext,
        $line->find('.change span', 1)->innertext);
}
?>

是的,我不得不在整个页面上使用Tidy ......我不知道Google雇用谁来制作HTML,但这绝对是可怕的。未公开的td,具有相同id的多个元素等......解析器在这些上窒息:(

答案 1 :(得分:0)

我没有在“http://www.google.com/finance”HTML页面中找到<div id="markets">,但找到<div id=markets>,然后尝试:

<?php
$source='http://www.google.com/finance';
//$source='sample.txt';
$page_all = file_get_contents($source);
$div_array=array();
preg_match_all('#<div id=markets>(.*?)</div>#sim', $page_all, $div_array);
//print_r($div_array);
print_r($div_array[1]);
?>