PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
skruglikov
Отправлено: 23 Января, 2017 - 00:18:31
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2017  
Откуда: Киев, Украина


Помог: 1 раз(а)




Добрый день!
Понадобилось написать скрипт, который парсит инфу с Амазона.
Решил сделать постраничный парсинг. С загруженной страницы, ссылка Next Page, аргументом возвращается в функцию для инициализации сеанса сURL. После выполнения запроса результат передаётся в PHP Simple HTML DOM Parser. Парсим нужную информацию, проверяем ссылку Next Page... Короче повторяем в цикле.

Проблема возникла когда новый сгенерённый URL, в переменной, возвращаю в функцию для cURL. И дальше 1-ой страницы дело не идёт. Причём, если я указываю тот же урл непосредственно в переменной как строка, всё нормально!

Может кто-то понимает, что происходит или сталкивался с подобной проблемой?

Скрипт неправильно работает со строками типа:
PHP:
скопировать код в буфер обмена
  1.  $dom_1->load(curl_get($res . $url));


Правильно работает со строками типа:
PHP:
скопировать код в буфер обмена
  1. $dom_2->load(curl_get($res . '/s/ref=sr_pg_2?rh=i%3Aaps%2Ck%3Aipad&page=2&keywords=ipad&ie=UTF8&qid=1485122977&spIA=B00IZBQ3LG,B01BNZN6DI'));


А хотелось бы как раз, чтобы работал именно первый вариант ;)

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.        
  4.         error_reporting (E_ALL);
  5.         ini_set ("display_errors", "On");
  6.         ini_set ("display_startup_errors", "On");
  7.  
  8.  
  9.         // PHP Simple HTML DOM Parser
  10.         include_once('lib/simple_html_dom.php');
  11.  
  12.  
  13.         // Resource & search page with keyword
  14.         $res = 'https://www.amazon.com';
  15.         $url = '/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=ipad';
  16.  
  17.  
  18.         // First page
  19.         echo $url . "<br>";
  20.  
  21.         // Create a DOM object & load HTML from a string
  22.         $dom_1 = new simple_html_dom();
  23.         $dom_1->load(curl_get($res . $url));
  24.         $url = $dom_1->find('div[id=pagn] a[id=pagnNextLink]', 0)->href;
  25.         $dom_1->clear();
  26.  
  27.         echo "<hr>";
  28.  
  29.  
  30.         // Second page
  31.         echo $url . "<br>";
  32.  
  33.         // Create a DOM object & load HTML from a string
  34.         $dom_2 = new simple_html_dom();
  35.         // $dom_2->load(curl_get($res . $url));
  36.         $dom_2->load(curl_get($res . '/s/ref=sr_pg_2?rh=i%3Aaps%2Ck%3Aipad&page=2&keywords=ipad&ie=UTF8&qid=1485122977&spIA=B00IZBQ3LG,B01BNZN6DI'));
  37.         $url = $dom_2->find('div[id=pagn] a[id=pagnNextLink]', 0)->href;
  38.         $dom_2->clear();
  39.  
  40.         echo "<hr>";
  41.  
  42.  
  43.         // Thrid page
  44.         echo $url . "<br>";
  45.  
  46.         // Create a DOM object & load HTML from a string
  47.         $dom_3 = new simple_html_dom();
  48.         // $dom_3->load(curl_get($res . $url));
  49.         $dom_3->load(curl_get($res . '/s/ref=sr_pg_3?rh=i%3Aaps%2Ck%3Aipad&page=3&keywords=ipad&ie=UTF8&qid=1485123047&spIA=B0052EP1XK,B008X1LHE6,B00IZBQ3LG,B01BNZN6DI'));
  50.         $url = $dom_3->find('div[id=pagn] a[id=pagnNextLink]', 0)->href;
  51.         $dom_3->clear();
  52.  
  53.         echo "<hr>";
  54.  
  55.  
  56.         // Four page
  57.         echo $url . "<br>";
  58.  
  59.         // Create a DOM object & load HTML from a string
  60.         // ...
  61.  
  62.         echo "<hr>";
  63.  
  64.  
  65.         // cURL
  66.         function curl_get($url, $referer = "http://www.google.com.ua"){
  67.  
  68.                 $ch = curl_init();
  69.                 curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  70.                 curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  71.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  72.                 curl_setopt($ch, CURLOPT_HEADER, false);
  73.                 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
  74.                 curl_setopt($ch, CURLOPT_URL, $url);
  75.                 curl_setopt($ch, CURLOPT_REFERER, $referer);
  76.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  77.                 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36");
  78.                 $str = curl_exec($ch);
  79.                 curl_close($ch);
  80.  
  81.                 return $str;
  82.         }
  83.  
  84. ?>
  85.  
 
 Top
skruglikov
Отправлено: 23 Января, 2017 - 19:47:39
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2017  
Откуда: Киев, Украина


Помог: 1 раз(а)




собственно вопрос решен! отказался от парсенной ссылки в "чистом виде", скорее всего там была бочина с символами... хз...

регулярным выражением выдернул только номер страницы и передал её дальше
PHP:
скопировать код в буфер обмена
  1.  
  2. curl_get($res . '/s/ref=sr_pg_' . $page_number . '?rh=i%3Aaps%2Ck%3Aipad&page=' . $page_number . '&keywords=ipad&ie=UTF8&qid=1485122977')
  3.  


всё работает ;)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB