Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проблема с phpQuery

 PHP.SU

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


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

> Описание: Не получается распарсить сайт
vanicon
Отправлено: 20 Марта, 2011 - 15:41:42
Post Id



Частый посетитель


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


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




Есть сайт, который нужно распарсить я его распарсил с помощью этой библиотеки (phpQuery) вообщем все получилось, кроме одного нужно поменять ссылки которые тоже с копировались вот структура html сайта:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <ol start="1" class="list">
  3. <li>
  4. <dl>
  5. <dt class="head">
  6. <a href="/yandsearch?cl4url=www%2Egazeta%2Eru%2Fnews%2Flenta%2F2011%2F03%2F20%2Fn%5F1755289%2Eshtml" class="title">На трассе М-5 под Самарой образовалась пробка из тысячи грузовиков</a> 27 сообщений
  7. </dt>
  8. <dd class="text">
  9. <p>
  10. Сильный снегопад и метель спровоцировали автомобильный затор на участке федеральной трассы М-5 "Урал" (<strong>Самара</strong>-Уфа – Челябинск). <br>
  11. </p>
  12. </dd>
  13. <dd class="similar">
  14. <ul>
  15. <li>
  16. <dl>
  17. <dt class="head">
  18. <a onclick="r(this,'news/aid=13730')" href="http://news.bcm.ru/doc/37055" target="_blank" class="title">Более тысячи фур из-за снегопада стоят в огромной пробке на трассе М-5 </a>
  19. &nbsp;
  20. <span class="info">
  21. <span class="time">16:09</span>&nbsp;<span class="source">NEWS.BCM.ru</span><span class="type"></span>
  22. </span>
  23. </dt>
  24. </dl>
  25. </li>
  26. <li>
  27. <dl>
  28. <dt class="head">
  29. <a onclick="r(this,'news/aid=1040')" href="http://www.gazeta.ru/news/lenta/2011/03/20/n_1755289.shtml" target="_blank" class="title">На трассе М-5 под <strong>Самарой</strong> образовалась пробка из тысячи грузовиков </a>
  30. &nbsp;
  31. <span class="info">
  32. <span class="time">15:54</span>&nbsp;<span class="source">Газета.Ru</span><span class="type"></span>
  33. </span>
  34. </dt>
  35. </dl>
  36. </li>
  37. </ol>
  38.  


и вот эти ссылки типа "/yandsearch?cl4url=www%2Egazeta%2Eru%2Fnews%2Flenta%2F2011%2F03%2F20%2Fn%5F1755289%2Eshtml" нужно поменять подставив впереди вот этот домен: http://news.ru. То есть должно получится вот так "http://news.ru/yandsearch?cl4url=www%2Egazeta%2Eru%2Fnews%2Flenta%2F2011%2F03%2F20%2Fn%5F1755289%2Eshtml"

Вот сам код которым это все парсится:
PHP:
скопировать код в буфер обмена
  1.  
  2. include(HTTPINCLUDE.'phpQuery/phpQuery/phpQuery.php');
  3.  
  4. $content = file_get_contents('http://news.yandex.ru/yandsearch?text='.trim_text($text).'&rpt=nnews2&grhow=clutop');
  5. $document = phpQuery::newDocument($content);
  6.  
  7.  
  8. $hentry = $document->find('ol.list');
  9. foreach ($hentry as $el) {
  10. $pq = pq($el); // Это аналог $ в jQuery
  11. $pq->find('dd.similar')->remove(); // удаляем ненужный элемент
  12. $pq->find('.info')->remove(); // удаляем ненужный элемент
  13.  
  14. $link_more = $pq->find('.title')->attr("href");
  15.  
  16. if (stripos($link_more, "yandsearch") === false) {
  17. }
  18. else{
  19. $pq->find('.title')->attr('href', "http://news.yandex.ru$link_more"); //меняем атрибуты найденого элемента  
  20. }
  21.  
  22. $tags2 = $pq->find('dd.text');
  23. $tags2->append("Читать полносью &#8658;");
  24.  
  25. $tags = $pq->find('li');
  26. $tags->append('<div class="clear"></div>');
  27. //$pq->find('h3.b-offers__title > a')->attr('target', "blank"); // добавляяем атрибут для найденого элемента
  28.  
  29. }
  30.  
  31. echo $hentry;
  32.  
  33.  

И ссылки заменяются, но заменяются все на одну определенную ссылку, то есть везде ссылки где их нужно было заменить они стали одинаковыми(но такие какие надо), может кто нибудь уже сталкивался с этой проблемой, помогите пожалуйста


-----
Так было, так есть и так будет
 
 Top
Budulianin
Отправлено: 20 Марта, 2011 - 22:57:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 132
Дата рег-ции: Окт. 2010  


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




Советую использовать для парсеров регулярные выражения, а не библиотеки. Кода меньше, работает быстрее и универсальнее.
 
 Top
movEAX
Отправлено: 21 Марта, 2011 - 05:35:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


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




Не жалеете вы воробьев..
PHP:
скопировать код в буфер обмена
  1. str_replace('"/yandsearch', '"http://news.yandex.ru/yandsearch', $content);


-----
армия.. самое убогое место
 
 Top
vanicon
Отправлено: 21 Марта, 2011 - 15:34:30
Post Id



Частый посетитель


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


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




movEAX
C помощью этой функции вы найдете это в ссылке и заменяете ее полностью, а ссылки то везде разные, но в моем коде это тоже работает но что то не так в самом парсере сайта


-----
Так было, так есть и так будет
 
 Top
JustUserR
Отправлено: 21 Марта, 2011 - 23:10:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




vanicon пишет:
C помощью этой функции вы найдете это в ссылке и заменяете ее полностью, а ссылки то везде разные, но в моем коде это тоже работает но что то не так в самом парсере сайта
Использование предполагаемого метода решения поставленной задачи в дейтвительности позволяет осуществить достижение поставленной цели, в силу проведение операции замены вложенных блоков информационных полей на основании использование статической ключевой предваряющей части, при условии сохранения базового элементного уровня трактования которой в ассоциированном информацинном поле возможно проведение упрощенного варианта замены целевых строковых элементов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
vanicon
Отправлено: 21 Марта, 2011 - 23:23:44
Post Id



Частый посетитель


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


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




JustUserR могли примерчик маленький кинуть если не трудно


-----
Так было, так есть и так будет
 
 Top
JustUserR
Отправлено: 21 Марта, 2011 - 23:55:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




vanicon пишет:
JustUserR могли примерчик маленький кинуть если не трудно
Осуществление упрощенной модификации решения рассматриваемой задачи возможно при использовании базовой структуры вложенных элементов информационного поля, позволяющей производить их детерминацию и модификацию на основании статического параметра
Если оригинальное информационное поле представлено в форме "/yandsearch?cl4url=www%2Egazeta%2Eru%2Fnews%2Flenta%2F2011%2F03%2F20%2Fn%5F1755289%2Eshtml", то в процессе осуществления указанной замены вложенных строковых объектов вида "/yandsearch" на элементы "http://site.ru/yandsearch", будет проведена замена и оригинального значения в виде "http://site.ru/yandsearch?cl4url=www%2Egazeta%2Eru%2Fnews%2Flenta%2F2011%2F03%2F20%2Fn%5F1755289%2Eshtml"
Указанный метод в действительности позвоялет осуществить упрощение решения задачи в частных случаях, однако в унифицированном методе требуется проведения анализа сопоставления базовых элементных уровней трактования в инкапсулированных формах


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB