Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2017, 14:51   #1
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию Парсинг - помогите!

Здравствуйте! Подскажите пожалуйста (помогите кодом) как сделать так, чтобы со страницы спарсить список товаров и цен.

Есть такой код:

Код:
<a href="https://www.isolux.ru/shpatlevka-universalnaya-gipsovaya-osnovit-versilk-pg34-g-20-kg.html">Шпатлевка универсальная гипсовая Основит Версилк PG34 G 20 кг</a>
<span class="price-new">от <span class="num">289,00</span> ₽/шт.</span>

<a href="https://www.isolux.ru/shpatlevka-gipsovaya-knauf-fugen-25-kg.html">Шпатлевка гипсовая Кнауф Фуген серая 25 кг</a>
<span class="price-new">от <span class="num">410,00</span> ₽/шт.</span>
В итоге должно получиться (в Memo):

Шпатлевка универсальная гипсовая Основит Версилк PG34 G 20 кг - 289,00

Шпатлевка гипсовая Кнауф Фуген серая 25 кг - 410,00



На странице много таких записей, нужно все спарсить до конца. Заранее благодарю!

Последний раз редактировалось Alex11223; 15.12.2017 в 15:11.
Maxim223 вне форума Ответить с цитированием
Старый 15.12.2017, 15:12   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Maxim223, если я не ошибаюсь, Вам уже давали код парсинга в другой теме (искать лень, извините, но тема была недавно). В чём проблема применить этот код не к одной строчке, а ко всему HTML-коду?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.12.2017, 15:15   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Взять HTML/XML парсер и использовать XPath, CSS селекторы и т.п.

Желательно перед этим выкинуть Дельфи и взять нормальный язык, где нет проблем с поиском и подключением (см. пакетный менеджер) библиотек.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.12.2017, 15:17   #4
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию

Давали и он отлично работает.. Но во-первых, не знаю как применить построчно (чтоб продолжался поиск), во-вторых, мне же нужно не одно значение, а несколько (товар, цена). Если не сложно - помогите.
Maxim223 вне форума Ответить с цитированием
Старый 15.12.2017, 15:20   #5
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Maxim223, если я не ошибаюсь, Вам уже давали код парсинга в другой теме (искать лень, извините, но тема была недавно). В чём проблема применить этот код не к одной строчке, а ко всему HTML-коду?
в этом то и проблема..
Maxim223 вне форума Ответить с цитированием
Старый 15.12.2017, 15:37   #6
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию

Есть строка

<h4>220 <span class="rubznak">p</span><sup class="text-muted"><!----></sup></h4>

Ищу 220 так:
r.Expression := '<h4>(.*?) <span class="rubznak"';

Но после <h4> в коде очень много чего. Как же тогда найти 220?
Maxim223 вне форума Ответить с цитированием
Старый 15.12.2017, 16:04   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Maxim223 Посмотреть сообщение
Но после <h4> в коде очень много чего. Как же тогда найти 220?

Конкретно в Вашем примере в коде после 220 "много чего" отсутствует. Вам нужно всего лишь выдрать кусок между <h4> и <span> - вот Вам и два якоря, за которые можно зацепиться при поиске.

То есть найти позицию субстроки <h4>, сдвинуть курсор на 4 символа (длина <h4>) и прочитать посимвольно всё, пока не встретится знак "<"
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.12.2017, 16:10   #8
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Конкретно в Вашем примере в коде после 220 "много чего" отсутствует. Вам нужно всего лишь выдрать кусок между <h4> и <span> - вот Вам и два якоря, за которые можно зацепиться при поиске.

То есть найти позицию субстроки <h4>, сдвинуть курсор на 4 символа (длина <h4>) и прочитать посимвольно всё, пока не встретится знак "<"
Да, но до этой строки есть еще много чего под тегом <h4> и это "много чего" не нужно.
Maxim223 вне форума Ответить с цитированием
Старый 15.12.2017, 16:19   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

потому что <h4> - это заголовок.
Можно же делать поиск по комбинации в одной строке <h4> и <span>

Или ещё как. Нужно просто определить тот набор символов, который идентифицирует данную строку как содержимое некоей информации, и плясать уже от него и от его положения в строке
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.12.2017, 16:51   #10
Maxim223
Пользователь
 
Регистрация: 30.09.2013
Сообщений: 19
По умолчанию

Можно ли как-то использовать "или" в шаблоне? Я ищу:

r.Expression := '.jpg" title="(.*?)"><img src="';

но вместо .jpg может быть .png
Maxim223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
парсинг jjioiu Работа с сетью в Delphi 7 19.10.2014 23:13
Парсинг PaHaNjkee Общие вопросы Delphi 40 27.03.2014 08:27
Парсинг nefakt Общие вопросы Delphi 4 04.05.2013 15:18
парсинг Pein95 Работа с сетью в Delphi 4 01.12.2011 02:06
Парсинг tigrend PHP 8 02.10.2011 00:09