1

我正在尝试使用简单的 HTML DOM 从 Zen-cart 商店按产品部分抓取产品数据。我可以很好地从第一页抓取数据,但是当我尝试加载产品的“下一页”时,网站返回 index.php 登录页面。

如果我直接通过 *http://URLxxxxxxxxxx.com/index.php?main_page=index&cPath=36&sort=20a&page=2* 使用该功能,它会很好地从第 2 页刮取产品信息。

如果我使用 cURL,也会发生同样的事情。

getPrices('http://URLxxxxxxxxxx.com/index.php?main_page=index&cPath=36');

   function getPrices($sectionURL) {

$opts = array('http' => array('method' => "GET", 'header' => "Accept-language: en\r\n" . "User-Agent:    Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6\r\n" . "Cookie:   zenid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"));
$context = stream_context_create($opts);

$html = file_get_contents($sectionURL, false, $context);
$dom = new simple_html_dom();
$dom -> load($html);

//Do cool stuff here with information from page.. product name, image, price and more info URL

if ($nextPage = $dom -> find('a[title= Next Page ]', 0)) {
    $nextPageURL = $nextPage -> href;
    echo $nextPageURL;
    $dom -> clear();
    unset($dom);
    getPrices($nextPageURL);
} else {
    echo "\nNo more pages to scrape!!";
    $dom -> clear();
    unset($dom);
}

}

关于如何解决这个问题的任何想法?

4

2 回答 2

0

我看到很多潜在的罪魁祸首。您没有跟踪 cookie 或设置referer,simple_html_dom 很有可能让您失望。

我的建议是通过fiddlercharles代理您的请求,并确保它们看起来像来自浏览器的方式。

于 2012-06-27T04:02:30.543 回答
0

原来在循环中传递给函数的下一页 URL 是传递 & 而不是 & 和 file_get_contents 不喜欢它。

$sectionURL = str_replace( "&", "&", urldecode(trim($sectionURL)) );
于 2012-07-01T15:43:17.173 回答