简单的html dom总是加载默认的第一页而不是指定的url

时间:2018-05-22 21:19:53

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

我想抓几个网页。我正在使用php和简单的html dom解析器。 例如,试图抓取此网站:https://www.autotrader.co.uk/motorhomes/motorhome-dealers/bc-motorhomes-ayr-dpp-10004733?channel=motorhomes&page=5

我使用此加载网址。

$html = new simple_html_dom();
$html->load_file($url);

这会加载正确的页面。然后我找到下一页链接,这里将是: https://www.autotrader.co.uk/motorhomes/motorhome-dealers/bc-motorhomes-ayr-dpp-10004733?channel=motorhomes&page=6

只是页面值从5更改为6.获取下一个链接的代码段是:

function getNextLink($_htmlTemp)
{
    //Getting the next page links
    $aNext = $_htmlTemp->find('a.next', 0);
    $nextLink = $aNext->href;    
    return $nextLink;
}

上述方法返回页面值为6的正确链接。 现在,当我尝试加载下一个链接时,它会从网址中删除第一个缺少页面查询的默认页面。

//After loop we will have details of all the listing in this page -- so get next page link
    $nxtLink = getNextLink($originalHtml);  //Returns string url
    if(!empty($nxtLink))
    {
        //Yay, we have the next link -- load the next link        
        print 'Next Url: '.$nxtLink.'<br>'; //$nxtLink has correct value
        $originalHtml->load_file($nxtLink); //This line fetches default page
    }

整个流程是这样的:

 $html->load_file($url);


//Whole thing in a do-while loop
$originalHtml = $html;
$shouldLoop = true;
//Main Array
$value = array();
do{
    $listings = $originalHtml->find('div.searchResult');    
    foreach($listings as $item)
    {
        //Some logic here
    }


    //After loop we will have details of all the listing in this page -- so get next page link
    $nxtLink = getNextLink($originalHtml);  //Returns string url
    if(!empty($nxtLink))
    {
        //Yay, we have the next link -- load the next link        
        print 'Next Url: '.$nxtLink.'<br>';
        $originalHtml->load_file($nxtLink);
    }
    else
    {
        //No next link -- stop the loop as we have covered all the pages
        $shouldLoop = false;
    }

} while($shouldLoop);

我试过编码整个网址,只有查询参数但结果相同。我也尝试创建simple_html_dom的新实例,然后加载文件,没有运气。请帮忙。

1 个答案:

答案 0 :(得分:0)

你需要html_entity_decode这些链接,我可以看到它们被简单的html-dom破坏了。

$url = 'https://www.autotrader.co.uk/motorhomes/motorhome-dealers/bc-motorhomes-ayr-dpp-10004733?channel=motorhomes';
$html = str_get_html(file_get_contents($url));

while($a = $html->find('a.next', 0)){
  $url = html_entity_decode($a->href);
  echo $url . "\n";
  $html = str_get_html(file_get_contents($url));
}