0

我对 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&subcat=dichte-kast),但事实并非如此。我猜这是因为我多次使用解析器。

有人对我有什么建议吗?

4

2 回答 2

1

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

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

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

于 2011-11-15T15:39:54.250 回答
0

我不确定我是否完全理解这个问题,但据我所知,您正试图从给定网页中获取一些图像及其相关标题,然后保存它们?如果是这样的话,那么这里有一些值得深思的地方。(对不起,不能更具体)。

使用 file_get_contents 获取 html 内容。

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

然后 preg_match() 您可能需要的所有图像标签和其他数据。有很多关于如何使用 preg_match 匹配 IMG 标签的 SRC 属性的信息

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

一旦您将图像标签集合作为数组,然后使用 curl 保存图像

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

我认为您遇到的问题是从您想要的内容中剥离 html 内容

于 2011-11-15T15:44:38.380 回答