简单的PHP DOM解析器在交换机情况下不起作用(PHP)

时间:2011-11-15 14:54:13

标签: php parsing screen-scraping simple-html-dom

我的Simple PHP DOM Parser有问题。我基本上必须为图像及其标题刮取目录网站。

网站必须抓取http://pinesite.com

我已经想出了以下代码(这将通过AJAX调用):

<?php
include ('simple_html_dom.php');
$function = $_GET['function'];
switch($function) {
  case 'subcat':
    $maincat = $_GET['cat'];
    $url = "http://www.pinesite.com/meubelen/index.php?".$maincat."&lang=de";
    $html = file_get_html($url);
    $data = $html->find('.box_166_content .act_path li a');
    $output ="";
    foreach ($data as $subcat) {
      $title = $subcat->plaintext;
      $href = $subcat->href;
      $link['title'] = $title;
      $link['href'] =substr($href,10);
      $output[] = $link;
    }
    echo json_encode($output);
    $html->clear();
    unset($html);
    unset($url);
    break;

  case 'images':
    $subcat = $_GET['subcat'];
    $url = "http://www.pinesite.com/meubelen/index.php?".$subcat;
    $html = file_get_html($url);
    $iframe = $html->find('#the_iframe',0);
    $url2 = $iframe->src;
    $html->clear(); 
    unset($html);

    $html2 = file_get_html("http://www.pinesite.com/meubelen/".$url2);
    $titles = $html2->find('p');
    $images = $html2->find('img');
    $output='';
    $i=0;
    foreach ($images as $image) {
      $item['title'] = $titles[$i]->plaintext;
      $item['thumb'] = $image->src;
      $item['image'] = str_replace('thumb_','',$image->src);
      $output[] = $item;
      $i++;
    }
    echo json_encode($output);
    break;
}
?>

这就是“函数”文件,不起作用的部分是最后一种情况。

我不知道这里有什么问题,所以我在一个单独的文件中测试了它(最后一个案例)(我把它从iFrame中获取的URL(该部分确实有效):

<?php
include_once "simple_html_dom.php";

$fullurl = "http://www.pinesite.com/meubelen/prog/browse.php?taal=nl&groep=18&subgroep=26";

$html = file_get_html($fullurl);
$titles = $html->find('p');
$images = $html->find('img');
$output='';
$i=0;
foreach ($images as $image) {
  $item['title'] = $titles[$i]->plaintext;
  $item['thumb'] = $image->src;
  $item['image'] = str_replace('thumb_','',$image->src);
  $output[] =$item;
  $i++;
}
echo json_encode($output);
?>

就像我说的那样,第一部分应该和第二部分一样(如果添加?function = images&amp; subcat = dichte-kast),但事实并非如此。我猜这是因为我多次使用解析器。

有人对我有建议吗?

2 个答案:

答案 0 :(得分:1)

问题在于您的$url2变量包含html实体,当您将其连接到根URL时,结果不是有效的URL。因此,file_get_html()函数不会检索您期望的url(以及数据),但会检索不同的内容。

问题的快速解决方案是html_entity_decode(),但您可能也想了解调试问题。它可以像将var_dump();应用于您正在使用的每个变量一样简单,并查看输出与您期望的输出的不同之处。

您可能还想检查一些安全问题。写$subcat = $_GET['sub_cat']绝不比直接使用$_GET['sub_cat']更安全。

答案 1 :(得分:0)

我不确定我是否完全理解这个问题但是我可以收集到的是你试图从给定的网页中获取一些图像及其相关标题然后保存它们?如果是这样,那么这里有一些值得思考的东西。 (对不起,它不是更具体)。

使用file_get_contents来获取html内容。

$html = file_get_contents('www.someurl.com');

然后preg_match()您可能需要的所有图像标签和其他数据。关于如何执行此操作有很多信息Matching SRC attribute of IMG tag using preg_match

 $matches = preg_match('<img>*<\/img>', $html); # this is a guess

将图像标记集合作为数组后,使用curl保存图像

http://www.edmondscommerce.co.uk/php/php-save-images-using-curl/

我认为你遇到的问题是从你想要的内容中删除html内容