Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62

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

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

Студворк — интернет-сервис помощи студентам
Добрый день Всем!
Народ, подскажите, значит есть на сайте пагинация.
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2015, 12:29
Ответы с готовыми решениями:

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

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

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

16
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
28.04.2015, 12:37
Вычислять количество не нужно. Просто при каждом запросе проверяйте, есть ли ссылка на следующую страницу. Если есть - получайте её адрес и вперёд.
0
Заблокирован
28.04.2015, 12:39
Цитата Сообщение от Rei555 Посмотреть сообщение
Но как видите по коду , что там тег А это стрелка.
не видим...
Зато видим &amp;p=2 что даёт основание ПРЕдПОЛОГАТь что там всего две ссылки.
А гадать не нужно. Надо проанализировать страницу.
0
F57
 Аватар для F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 12:42
Получаешь href последней ссылки. Определяешь чему равен p
0
Заблокирован
28.04.2015, 12:44
Цитата Сообщение от Para bellum
Вычислять количество не нужно. Просто при каждом запросе проверяйте, есть ли ссылка на следующую страницу.
Раз уж идти по такому пути также надо проверять не парсилась ли страница уже. Так как некоторые пагинаторы организованы так что ссылки идут как бы по кругу.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
28.04.2015, 12:46
Цитата Сообщение от Trukl Посмотреть сообщение
Раз уж идти по такому пути также надо проверять не парсилась ли страница уже. Так как некоторые пагинаторы организованы так что ссылки идут как бы по кругу.
А я что-то против сказал?
Я объяснил алгоритм, а как его реализует Rei555 - уже другое дело.
Да и пути другого нет.
0
Заблокирован
28.04.2015, 12:50
Цитата Сообщение от Para bellum Посмотреть сообщение
Вычислять количество не нужно.
Иногда как раз проще получить общей количество и спарсить в цикле. Но всё зависит от организации сайта который грабят.
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
28.04.2015, 12:51  [ТС]
Получаешь 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
 Аватар для F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 12:53
Цитата Сообщение от Rei555 Посмотреть сообщение
Всегда стрелка (типо вперед или назад)
Какая разница? Стрелочка, кругляшка. href
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
28.04.2015, 12:55  [ТС]
Цитата Сообщение от 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
 Аватар для F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 12:56
Какой пример указал. Так и помогаем.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
28.04.2015, 12:57
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
Цитата Сообщение от Rei555 Посмотреть сообщение
Последняя ссылка имеет
Цитата Сообщение от Trukl Посмотреть сообщение
А гадать не нужно. Надо проанализировать страницу.
Если ты проходишь по ссылке (на стрелочку) страницы заканчиваются? Их всего две? Если всего две значит можно считать двойку последней страницей (и соответственно добавлять этот параметр к твоему циклу). Если же страниц больше то стрелочка указывает лишь на следующию страницу. А значит надо идти по пути предложенному Para bellum,
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 62
28.04.2015, 13:11  [ТС]
Цитата Сообщение от 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
 Аватар для F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
28.04.2015, 13:26
омг. дай уже ссылку на сайт который парсишь
* или правилами нельзя?

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

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

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

аля
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$end=0;
 
foreach(??)
{
   $end=$last;
}
 
 
if ($end!=0)
{
   ///
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2015, 13:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru