0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
1

Пагинация при парсинге (phpQuery)

28.04.2015, 12:29. Показов 5750. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день Всем!
Народ, подскажите, значит есть на сайте пагинация.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="right toolbar__pages">
                <div class="pager">
                  <ul class="pagination pagination-sm">
                  
          
                <li class="active"><a href=".html?limit=100&amp;no_cache=true&amp;p=1">1</a></li>
                <li><a href=".html?limit=100&amp;no_cache=true&amp;p=2">2</a></li>
                
                 
                <li>
            <a title="След." href=".html?limit=100&amp;no_cache=true&amp;p=2" class="next"><i class="fa fa-chevron-right"></i></a>
        </li>
              </ul>
    </div>
            </div>
вот этим парсю последнее значение(по последнему значению, столько раз цикл будет работать)
HTML5
1
$pagesCount = pq('div.toolbar__pages ul.pagination-sm a:last')->html();
Но как видите по коду , что там тег А это стрелка.
Вообщем подскажите, как вычислить количество страниц с товаром в категории.
Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2015, 12:29
Ответы с готовыми решениями:

Кодировка при парсинге
не пойму что не так с кодировкой и как ее настроить правильно, а именно вот наглядный пример ...

Ошибка при парсинге
&lt;form action=&quot;&quot; method=&quot;post&quot; name=&quot;s&quot;&gt; &lt;textarea cols=&quot;50&quot; rows=&quot;10&quot;...

Сохранения картинок при парсинге
Добрый день Гуру!!!Подскажите, парсю сайт с помощью (phpQuery) все что нужно получаю , но ни как не...

Ошибки при парсинге на PHP
В данном куске кода страницы мне нужно извлечь текст из тегов &lt;option&gt;: &lt;td&gt;&lt;select name=&quot;make&quot;...

16
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
28.04.2015, 12:37 2
Вычислять количество не нужно. Просто при каждом запросе проверяйте, есть ли ссылка на следующую страницу. Если есть - получайте её адрес и вперёд.
0
Заблокирован
28.04.2015, 12:39 3
Цитата Сообщение от Rei555 Посмотреть сообщение
Но как видите по коду , что там тег А это стрелка.
не видим...
Зато видим &amp;p=2 что даёт основание ПРЕдПОЛОГАТь что там всего две ссылки.
А гадать не нужно. Надо проанализировать страницу.
0
F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 12:42 4
Получаешь href последней ссылки. Определяешь чему равен p
0
Заблокирован
28.04.2015, 12:44 5
Цитата Сообщение от Para bellum
Вычислять количество не нужно. Просто при каждом запросе проверяйте, есть ли ссылка на следующую страницу.
Раз уж идти по такому пути также надо проверять не парсилась ли страница уже. Так как некоторые пагинаторы организованы так что ссылки идут как бы по кругу.
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
28.04.2015, 12:46 6
Цитата Сообщение от Trukl Посмотреть сообщение
Раз уж идти по такому пути также надо проверять не парсилась ли страница уже. Так как некоторые пагинаторы организованы так что ссылки идут как бы по кругу.
А я что-то против сказал?
Я объяснил алгоритм, а как его реализует Rei555 - уже другое дело.
Да и пути другого нет.
0
Заблокирован
28.04.2015, 12:50 7
Цитата Сообщение от Para bellum Посмотреть сообщение
Вычислять количество не нужно.
Иногда как раз проще получить общей количество и спарсить в цикле. Но всё зависит от организации сайта который грабят.
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
28.04.2015, 12:51  [ТС] 8
Получаешь href последней ссылки. Определяешь чему равен p
Последняя ссылка имеет

HTML5
1
2
3
<a class="next" title="След." href="http:///c-186.html?p=2">
<i class="fa fa-chevron-right"></i>
</a>
Всегда стрелка (типо вперед или назад)

Вычислять количество не нужно. Просто при каждом запросе проверяйте, есть ли ссылка на следующую страницу. Если есть - получайте её адрес и вперёд.
Можно примерчик. А то что я только не перебрал. Пытался тупо получить предпоследнее число в пагинации, и столько раз крутнуть цикл.. но что то не выходит.
0
F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 12:53 9
Цитата Сообщение от Rei555 Посмотреть сообщение
Всегда стрелка (типо вперед или назад)
Какая разница? Стрелочка, кругляшка. href
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
28.04.2015, 12:55  [ТС] 10
Цитата Сообщение от F57 Посмотреть сообщение
Какая разница? Стрелочка, кругляшка. href
HTML5
1
2
3
<a class="next" title="След." href="http:///c-186.html?p=2">
<i class="fa fa-chevron-right"></i>
</a>
И тут я получу 2 , а страниц на самом деле 123.
0
F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 12:56 11
Какой пример указал. Так и помогаем.
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
28.04.2015, 12:57 12
Rei555, просто заместо вот этого:
PHP
1
pq('div.toolbar__pages ul.pagination-sm a:last')->html();
Напишите, чтобы выбирался не вложенный html, а атрибут ссылки "href".
Для парсига в данном случае лучше сделать рекурсивную функцию (которая сама себя вызывает). Что-то вроде этого:
PHP
1
2
3
4
5
6
7
8
9
function parse( $url ){
    # Тут код
    # ...
 
    # Если ссылка на следующую страницу найдена
    if( ... )
        # Вызываем функцию парсинга
        parse( $ссылка );
}
0
Заблокирован
28.04.2015, 13:00 13
Цитата Сообщение от Rei555 Посмотреть сообщение
Последняя ссылка имеет
Цитата Сообщение от Trukl Посмотреть сообщение
А гадать не нужно. Надо проанализировать страницу.
Если ты проходишь по ссылке (на стрелочку) страницы заканчиваются? Их всего две? Если всего две значит можно считать двойку последней страницей (и соответственно добавлять этот параметр к твоему циклу). Если же страниц больше то стрелочка указывает лишь на следующию страницу. А значит надо идти по пути предложенному Para bellum,
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
28.04.2015, 13:11  [ТС] 14
Цитата Сообщение от Para bellum Посмотреть сообщение
Rei555, просто заместо вот этого:
Код PHP
1
pq('div.toolbar__pages ul.pagination-sm a:last')->html();
Напишите, чтобы выбирался не вложенный html, а атрибут ссылки "href".
HTML5
1
$pagesCount = pq('div.toolbar__pages ul.pagination-sm a')->attr('href');
Но это дает просто Ссылку, а цикл не может работать с условием URL. Ему то число надо)
Или я вас не правильно понял.
Цитата Сообщение от Trukl Посмотреть сообщение
Если ты проходишь по ссылке (на стрелочку) страницы заканчиваются? Их всего две? Если всего две значит можно считать двойку последней страницей (и соответственно добавлять этот параметр к твоему циклу). Если же страниц больше то стрелочка указывает лишь на следующию страницу. А значит надо идти по пути предложенному Para bellum,
Второй вариант.
0
F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 13:26 15
омг. дай уже ссылку на сайт который парсишь
* или правилами нельзя?

Добавлено через 8 минут
ок. получил ссылку.

твой чудо парсер разве не может получить пред-последний href?
ну или просто вылови его по class="last"
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
28.04.2015, 13:38  [ТС] 16
Цитата Сообщение от F57 Посмотреть сообщение
твой чудо парсер разве не может получить пред-последний href?
ну или просто вылови его по class="last"
Внатуре Чудо))

Выловил по классу., но выводит цифру в классе last столько кол-во раз , сколько значение самой цифры. Значение из класса Ласт получается, в цикле же . Как его из цикла то убрать!? Получил значение за первый цикл и в сторону.
0
F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 13:59 17
Убирай цикл. Либо забей и просто бери в цикле. Комп от перенагрузки не помрёт.

аля
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$end=0;
 
foreach(??)
{
   $end=$last;
}
 
 
if ($end!=0)
{
   ///
}
0
28.04.2015, 13:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2015, 13:59
Помогаю со студенческими работами здесь

Не действует тег <br> при парсинге
почему то не действует тег &lt;br&gt; при парсинге названий смартфонов с сайта. скрин прикрепляю ...

Ошибка ERR_CONNECTION_RESET при парсинге
Всем привет. Сразу скажу, что я перерыл почти весь интернет и не нашел решения этой проблемы там. В...

Неправильная кодировка при парсинге
Привет всем. Извеняюсь, что создал ещё одну тему. Просто нужно решить одну проблему. Использую...

Проверка на существование блока при парсинге
Для парсинга использую DOM. Как сделать проверку в цикле, чтобы не выводило ошибки(пропускало их),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru