Простой HTML-домен всегда загружает первую страницу по умолчанию, а не указанный URL - PullRequest
0 голосов
/ 23 мая 2018

Я хочу очистить несколько веб-страниц.Я использую PHP и простой HTML-анализатор DOM.Например, пытаясь очистить этот сайт: https://www.autotrader.co.uk/motorhomes/motorhome-dealers/bc-motorhomes-ayr-dpp-10004733?channel=motorhomes&page=5

Я использую эту загрузку URL.

$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. Теперь, когда я пытаюсь загрузить эту следующую ссылку, он выбирает первую страницу по умолчанию с запросом страницы, отсутствующим в URL.

//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);

Я попытался кодировать весь URL, только параметры запроса, но тот же результат.Я также попытался создать новые экземпляры simple_html_dom и затем загрузить файл, но не повезло.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 23 мая 2018

Вам нужно html_entity_decode этих ссылок, я вижу, что они искажаются с помощью simple-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));
}
...