Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Парсинг защищенного сайта (поиск товара по штрих-коду) / 18 сообщений из 18, страница 1 из 1
23.07.2018, 12:17
    #39677614
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
Всем доброго времени суток.
Только наладил загрузку наименований товара с сайта barcode-list. ru , как он перестал работать.
Поиск альтернативы привел на сайт ru.disai. org . Огромная база данных, но только сайт имеет защиту от парсинга.

Перепробовав массу вариантов остановился на следующем способе (пример прикреплен).
Страничка открывается в IE с заданным штрих-кодом и программно нажимается кнопка поиска.
После этого сайт "подтягивает" наименования и Access копирует страничку с нужными данными в текстовый документ.

Проблема возникла с выполнением команды нажатия кнопки поиска (id="search-form"). Автоматически команда Clik не срабатывает, но если в процессе выполнения процедуры нажать эту кнопку вручную, то все прекрасно сохраняется.
Суть вопроса: как можно из под Access найти и запустить выполнение скритпа для этой кнопки. И можно ли вообще это сделать?

Код: html
1.
2.
3.
4.
<form id="search-form" action="/" method="POST" accept-charset="windows-1251" class="navbar-form pull-right">
<input type="text" name="search_query" value="5019370007019" onblur="if(this.value=='') 
this.value='Поиск текста или штрих-кода'" onfocus="if(this.value =='Поиск текста или штрих-кода' ) this.value=''">
<a href="#" onclick="document.getElementById('search-form').submit()"></a></form>
...
Рейтинг: 0 / 0
23.07.2018, 12:57
    #39677669
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
Разобрался)
Надо было это добавить:
IE.Document.getElementById("search-form").submit
IE.Document.getElementById("search-form").Click

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function WebPageText(ByVal sURL As String) As String
    On Error Resume Next
    Set IE = CreateObject("InternetExplorer.Application"):    ' загружаем браузер Internet Explorer
    'IE.Visible = True 'включаю для возможности вручную нажать кнопку поиска
    IE.Navigate sURL    ' загружаем сайт
    While IE.Busy Or (IE.ReadyState <> 4): DoEvents: Wend    ' ждем, пока загрузится страница
    IE.Document.getElementById("search-form").submit
    IE.Document.getElementById("search-form").Click
    TM_Pause (2)
    WebPageText = IE.Document.body.innerText    ' считываем текст веб-страницы
    IE.Quit: Set IE = Nothing    ' закрываем браузер
End Function
...
Рейтинг: 0 / 0
23.07.2018, 17:02
    #39677809
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
ШаманТолько наладил загрузку наименований товара с сайта barcode-list. ru , как он перестал работать.

-все бесплатное умирает...
-альтернатива местами похожа на помойку, по крайней мере нет наиболее приемлемого варианта как был на первом сайте...
- попробуй два штрих-кода 4601593001540 и 4607131043928, в первом случае названия включают скидку того магазина, который этот штрих-код туда забульбенил, во втором одно полное название из двух слов разбито на два названия...
- но поиск работает, это плюс, у меня тоже кое-что было завязано на первый сайт...
- до завтра переделаю, если дашь мыло в мое мыло, сброшу оконечный парсинг вариантов в список на форму, ну это если сам уже не сделал...
...
Рейтинг: 0 / 0
23.07.2018, 17:14
    #39677822
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
vmag-все бесплатное умирает...
эт точно,проверено неоднократно
...
Рейтинг: 0 / 0
24.07.2018, 10:20
    #39678093
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
vmag- до завтра переделаю, если дашь мыло в мое мыло, сброшу оконечный парсинг вариантов в список на форму, ну это если сам уже не сделал...
Спасибо за предложенную помощь, но у меня уже все настроено. Надо было только источники данных заменить.

Тестируя эту базу штрих-кодов столкнулся с еще одним "косячком".
Например для штрих-кода 8590232000050 выдает не построчный ответ, а общий список
AC/COLGATE З/Щ КЛАССИКА PLUS СРЕДНЯЯ, АС/COLGATE З/Щ КЛАССИКА PLUS СРЕДНЯЯ, З/щ "Колгейт" Плюс средняя, З/щ COLGATE Классика плюс средняя, З/Щ Колгейт Классика Плюс Средняя, З/ЩЕТКА COLGATE ПЛЮС (сред/жест), З/ЩЕТКА COLGATE ПЛЮС МЕДИУМ, З/ЩЕТКА КЛАССИКА ПЛЮС СР ЖЕСТКОСТИ COLGATE, З/щётка Колгейт Классика плюс/ Мягкая/Средняя, Зуб щетка Колгейт Клас плюс ср жест, Зуб щетка Колгейт Классика плюс, ЗУБ. ЩЕТКА "COLGATE" PLUS MEDIUM, Зуб.щетка COLGATE Плюс средняя 20609/50306, Зуб.щётка Колгейт Классика Здоровья, Зуб.щетка Колгейт Классика плюс, Зуб/щетка "Колгейт" средняя, ЗУБ/ЩЕТКА COLGATE КЛАССИКА ЗДОРОВЬЯ СРЕДНЯЯ , ЗУБН.ЩЕТКА КОЛГЕЙТ ПЛЮС СРЕДНЕЙ ЖЕСТ. , ЗУБНАЯ ЩЕТКА "COLGATE" КЛАССИКА ЗДОРОВЬЯ СРЕДНЕЙ ЖЕСТКОСТИ 1ШТ., Зубная щетка "Колгейт" Классика Плюс средн , Зубная щетка "Колгейт" Классика Плюс средней жесткости Россия 1/72, ЗУБНАЯ ЩЕТКА COLGATE КЛАССИКА PLUS СРЕДНЯЯ, ЗУБНАЯ ЩЁТКА COLGATE КЛАССИКА ПЛЮС СРЕДНЕЙ ЖЕСТКОСТИ, Зубная щетка Colgate Классика плюс средняя, Зубная щетка Colgate классическая средняя жесткость, ЗУБНАЯ ЩЕТКА КОЛГЕЙТ КЛАССИКА ЗДОРОВЬЯ СР, ЗУБНАЯ ЩЕТКА КОЛГЕЙТ КЛАССИКА ПЛЮС/КЛАССИКА ЗДОРОВЬЯ СРЕДНЯЯ, Зубная щетка Колгейт Классика средняя, Зубная щетка Колгейт классическая средняя жесткость, Зубная щетка Колгейт плюс - средней жесткости - 1 шт, ЗУБНАЯ ЩЕТКА КОЛГЕЙТ ПЛЮС МЕДИУМ , Зубная щетка Колгейт Плюс средняя 1 шт, КОЛГЕЙТ З/ЩЕТКА ПЛЮС средняя (Срок не ограничен) *12 , ЩЕТКА ЗУБНАЯ "COLGATE" КЛАССИКА (СРЕДНЕЙ ЖЕСТКОСТИ), ЩЕТКА ЗУБНАЯ "COLGATE" КЛАССИКА ЗДОР. СРЕД. ЖЕСТ. , Щетка зубная "COLGATE" КЛАССИКА ПЛЮС (средняя) а/п 20609/72, Щетка зубная Colgate Plus классика средняя, ЩЕТКА ЗУБНАЯ КОЛГЕЙТ ПЛЮС МЕДИУМ КИТАЙ, Зубная щетка Colgate Классика Плюс средняя 1/72*12, ЗУБ ЩЕТКА КОЛГЕЙТ КЛАССИКА ЗДОРОВЬЯ (КОЛГЕЙТ САНКШАО) , Зубн. щетка Колгейт Классика плюс средняя 1шт, ЗУБ ЩЕТКА КОЛГЕЙТ КЛАССИКА ПЛЮС (КОЛГЕЙТ САНКШАО) , ЩЕТКА ЗУБНАЯ "КОЛГЕЙТ" КЛАССИКА ЗДОРОВЬЯ сред.жест., З/ЩЕТКА КОЛГЕЙТ ПЛЮС МЕДИУМ, Зубная щетка Колгейт Классика Плюс средней жесткости Россия 1/72, ЗУБ ЩЕТКА КОЛГЕЙТ КЛАССИКА ЗДОРОВЬЯ (КОЛГЕЙТ-ПАЛМОЛИВ)

Есть какие либо варианты обработки подобной информации?
Можно конечно в спецификации импорта указать разделитель полей "запятую", но есть вероятность что этот символ попадет в наименовании (Кока-Кола 0,33)
...
Рейтинг: 0 / 0
24.07.2018, 14:12
    #39678294
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
ШаманЕсть какие либо варианты обработки подобной информации?

Ну, это можно отнести с натягом к исключениям, к тому же возможно кто-то добавит в разделители #, @ или еще что...
Я бы делал так:
1. Вываливал бы всё в список на форму (это по идее уже реализовано и в данном случае это одна строка).
2. При выборе строки списка, значение записывать в поле на форму для редактирования.
3. При стандартной ситуации, дальнейших действий не требуется, а при подобных коллизиях пользователь может убрать лишнее руками.
Промежуточное поле возможно будет полезным и при стандартных ситуациях, например пользователь захочет сократить найденное или видит его по другому... тут то главное не набирать весь текст руками...
...
Рейтинг: 0 / 0
24.07.2018, 14:26
    #39678311
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
Шаман,

мне первый ресурс больше нравился, я оттуда брал только то название, которое рекомендовали модераторы (варианты даже не рассматривал), оно было самым коротким, общим и лаконичным, здесь похоже нет ни модераторов ни простейших фильтров на прием штрих-кодов, любой зарегистрировавшийся может залить туда свой магазин полностью... туда попадают даже даже внутренние штрих-коды, посмотри 0000000000017, 0000000000024 - вип скидка Дудочкина 10 %...
Так что думаю, промежуточное поле для само модерации - точно не помешает...
...
Рейтинг: 0 / 0
24.07.2018, 16:00
    #39678385
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
Шаман,

Вот тут есть решение косячка и ему подобных...
Записываешь результат в список и смотришь сколько строк в списе, если одна, то скорее всего косячок...
Не претендую на идеальное решение, просто решение в лоб, от которого можно оттолкнуться...
...
Рейтинг: 0 / 0
24.07.2018, 18:12
    #39678491
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
vmag , СПАСИБО за совет.
Твой пример более мобильный чем моя обработка, но ход мыслей в общем совпал.
Я вырезал и перезаписал текстовик, а потом импортировал в таблицу базы данных через запрос, где фильтровал пустые строки.
В общем как классический шаман, вместо того что бы сказать что завтра будет дождь, сначала исполнил ритуальный танец с бубном)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function ObrTXT()
On Error Resume Next: Err.Clear
Dim tmp As String, tov As String, tov2 As String
Open "C:\Transport\1.txt" For Input As #1: S = Input(LOF(1), 1): Close #1
Open "C:\Transport\2.txt" For Output As #1
tov = Left(S, (InStr(S, "---") - 1))
tov2 = Replace(Mid(tov, (InStr(tov, "СистемаШтрих код") + 16)), ", ", "" & Chr(13) + Chr(10) & "")
Print #1, tov2
Close #1
DoCmd.OpenQuery "SaveSHTRIH+", acViewNormal, acEdit
Kill "C:\Transport\1.txt" 
Kill "C:\Transport\2.txt" 
End Function


К стати, раз уж зашла такая тема, есть еще сайт с хорошей базой штрих-кодов
ratengoods. com/search/?page=1&type=product&lang=ru&query=8590232000050
Для получения информации надо вытянуть ссылку
ratengoods. com/goods /6379047/ 8590232000050
Она есть, но способ, рассмотренным в начале топика не прокатывает. Правда я еще этот сайт особо и не изучал.
Код: html
1.
2.
3.
<div><a href="/goods/6379047/8590232000050/zubnaya-shchetka-sredney-zhestkosti-klassika-plyus-colgate-1sht/"
 class="goods-img" style="background-image: url(&quot;https://api.ratengoods.com/api/v0.10/image/8770007/?
width=500&amp;height=500&quot;);"></a><div class="goods-content"><div class="goods-category"><div><a href="#">Все товары</a>
...
Рейтинг: 0 / 0
24.07.2018, 19:08
    #39678523
DarkMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
ШаманМожно конечно в спецификации импорта указать разделитель полей "запятую", но есть вероятность что этот символ попадет в наименовании (Кока-Кола 0,33)

В данном примере можно использовать запятую и после нее пробел. Это в данном .
...
Рейтинг: 0 / 0
24.07.2018, 19:17
    #39678528
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
DarkManВ данном примере можно использовать запятую и после нее пробел. Это в данном .
Да, именно по этому принципу я и пошел
Replace(Mid(tov, (InStr(tov, "СистемаШтрих код") + 16)), ", ", "" & Chr(13) + Chr(10) & "")
...
Рейтинг: 0 / 0
24.07.2018, 19:45
    #39678539
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
ШаманТвой пример более мобильный чем моя обработка, но ход мыслей в общем совпал.

на самом деле там фишка в другом - дерготня по штрих-коду не затрагивает таблицы БД, только отвязанный список в форме, следовательно файл БД по напрасну не пухнет, прикинь - ты каждый раз пишешь в таблицу мусор, потом ее чистишь...
...
Рейтинг: 0 / 0
24.07.2018, 19:48
    #39678542
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
vmag,

не глянул, что ты через файлы выкрутился, думал реально в таблицы пишешь...
...
Рейтинг: 0 / 0
25.07.2018, 12:57
    #39678857
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
Выкладываю практически готовый поисковик 2в1. Вплотную не тестировал, так что возможны баги.
Реализован поиск сначала по сайту ratengoods. com, а если товар не найден, то по ru.disai. org.
За основу использовал пример, предложенный vmag (за что ему ОГРОМНОЕ СПАСИБО!!!)
Найти ссылку на сайте ratengoods. com на полное описание товара не удалось, поэтому ограничился кратким его описанием.

Остался невыясненным только один вопрос. Для дальнейшей обработки данных мне необходимо сохранить результат поиска с таблицу.
Вот в этом фрагменте:
Код: vbnet
1.
2.
3.
4.
'дублирую запись в таблицу
rec.AddNew
rec![hame] = s
rec.Update


несколько строк из переменной копируются в таблицу ШтрихКоды в одну строку с переносами (кнопка Пример2), а надо что бы построчно.
Как это можно исправить?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Private Sub Поиск2()
Dim rec As Recordset
Set rec = CurrentDb.OpenRecordset("ШтрихКоды")
Dim s As String
Dim i As Long
s = "http://ru.disai.org/barcode/ean-13/" & Me.ШК
s = WebPageText(s)                  'полный ответ
i = InStr(s, "Введенный Вами GTIN") 'отсекаем глобально верх
If i <> 0 Then
  s = Mid(s, i)
  i = InStr(s, "---") 'отсекаем глобально низ
  If i <> 0 Then
    s = Mid(s, 1, i - 1)
    i = InStr(s, "Варианты")
    If i <> 0 Then
      s = Mid(s, i)
      ' Убираем строку варианты
      i = InStr(s, Chr(13) & Chr(10))
      If i <> 0 Then s = Mid(s, i + 2)
'дублирую запись в таблицу
rec.AddNew
rec![hame] = s
rec.Update
      ' заменяем перевод каретки на ;
      s = Replace(s, Chr(13) & Chr(10), ";")
    End If
  End If
  Me.s1.RowSource = s

  If Me.s1.ListCount = 1 Then
  s = Replace(s, ",", ";")
  Me.s1.RowSource = s
  End If
  '
  ' Вот тут дальше можно опять проверять количество строк в списке и мнять другой разделитель если что...
  '
Ком = "Готово! (Поиск 2 сайт ru.disai.org)"
  Exit Sub
End If
Ком = "Ничего не найдено!"
End Sub

...
Рейтинг: 0 / 0
25.07.2018, 15:30
    #39679012
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
ШаманОстался невыясненным только один вопрос. Для дальнейшей обработки данных мне необходимо сохранить результат поиска с таблицу.

Какой у тебя общий алгоритм задачи?
Зачем писать всё?
У меня бы был алгоритм такой:
1. Найти по штрих-коду варианты названий из источника № 1 и показать их в списке.
2. Записать в БД выбранный вариант ( один единственный ) пользователем.
3. Конец задачи.
4. Если пункт 1 не сработал, найти по штрих-коду варианты названий с источника № 2 и показать их в списке.
5. Записать в БД выбранный вариант ( один единственный ) пользователем.
6. Конец задачи.
Это основной алгоритм, в котором могут быть вариации:
- например искать сразу и там и там, показывать в списке общий результат, но писать в БД только одно значение, выбранное пользователем (только нужно ли это, времени больше уходит на поиск).
- после выбора значения пользователем, вместе со значением писать в БД номер источника для анализа продуктивности (с каким источником наиболее совпадает тематика фирмы - парфюм, запчасти, продукты и т.д.).
...
Рейтинг: 0 / 0
25.07.2018, 17:26
    #39679168
DarkMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
Шаманнесколько строк из переменной копируются в таблицу ШтрихКоды в одну строку с переносами (кнопка Пример2), а надо что бы построчно.
Как это можно исправить?
Если честно , то я ничего не понял из вышесказанного , наверное был в танке .
Но судя из вчерашнего примера Вы сайта получаете данные в виде одной большой строки. А Вам нужно разбить на строки по разделителю запятая с пробелом , и каждую строку занести в таблицу . Я правильно понял ? Или я опять в танке.???
...
Рейтинг: 0 / 0
25.07.2018, 17:46
    #39679186
Шаман
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
По сути, требуемая задача выполнена на 100%.
Пикнули код, проверили по первой базе.
Если есть, добавляем в базу.
Если нет, то ищем во второй.
Если нашли во второй, то получаем список значений и одно из них (наиболее подходящее) выбираем для записи в базу.
Не нашли во второй базе, предлагаем пользователю ввести наименование ручками.
Вот собственно и весь мой алгоритм.

Дублирование в таблицу БД, это просто спортивный интерес.
Вдруг где то в дальнейшем потребуется )

На этом собственно всё. Прикрепляю финальную базу (без экспериментов).
P.S. vmag еще раз благодарю за содействие. Удачи!
...
Рейтинг: 0 / 0
25.07.2018, 18:30
    #39679215
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг защищенного сайта (поиск товара по штрих-коду)
ШаманP.S. vmag еще раз благодарю за содействие. Удачи!

Тебе тоже спасибо!
Многие вроде шарят в акесе, а шаг влево/вправо и уже приплыли, влез в HTML - молодец...
Если б ты эту тему не поднял, я б возможно не скоро узнал, что у меня че-то не работает...
В этом примере твой алгоритм
+ дополнительные бонусы (менять старые названия, учет из какого источника)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Парсинг защищенного сайта (поиск товара по штрих-коду) / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]