Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42

Не парсится сайт

06.08.2025, 12:53. Показов 3821. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте !
Подскажите, пожалуйста, что неправильно ?
Значения имени и цена на вытаскиваются этим методом. Хотя ищу элементы по имени, как они в HTML.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub ПарсингChrome()
    Dim driver As New WebDriver ' Переменная будет новым вебдрайвером (инициализируется новый драйвер Селениум)
    driver.Start "Chrome" ' Открывается новая страница Chrome
    driver.Get "https://autoshini.ru/podbor-shin" ' Драйвер направляет к заданной странице
    Application.Wait Now + TimeValue("0:00:05") ' Ждём (Application.Wait приостанавливает дальнейшее действие макроса) 5 секунд, чтобы сайт полностью загрузился.
    
    Dim name As Object
    Dim price As Object
    Set name = driver.FindElementsByName("data-name")
    Set price = driver.FindElementsByName("data-price")
    
    Dim currentRow As Integer
    currentRow = 1
           
    Cells(1, 1).Value = name
    Cells(1, 2).Value = price
    
    MsgBox name.innerText
       
    
    driver.Quit
 
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2025, 12:53
Ответы с готовыми решениями:

Как из программы найти конкретный сайт
Как из программы на VB найти конкретный сайт и его HTML-код?

Нужен примерный код отправки GET и POST запросов на сайт, и получение ответа
Люди помогите пожалуйста, можете показать примерный код отправки GET и POST запросов на сайт, и...

Как отправить post запрос на сайт?
Здравствуйте! Как отправить post запрос в vb6 с помощью winsock? Я пробовал у меня не получается.

48
Одесса - Украина
 Аватар для MikeVol
523 / 201 / 70
Регистрация: 01.04.2020
Сообщений: 624
07.08.2025, 17:50
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от volshebnik4 Посмотреть сообщение
в Экселе не появилась ни одна заполненная ячейка
Ну значит невидать вам результата.
Миниатюры
Не парсится сайт  
0
jump
 Аватар для I can
5005 / 4769 / 852
Регистрация: 13.04.2015
Сообщений: 10,017
07.08.2025, 19:23
MikeVol, у него похоже винда какая-то кастрированная, ничего не работает.
0
Одесса - Украина
 Аватар для MikeVol
523 / 201 / 70
Регистрация: 01.04.2020
Сообщений: 624
07.08.2025, 21:08
I can, Приветствую вас! Возможно что-то пользователь сам накосячил со своей системой по типу "оптимизация системы" по гайду из интернета.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9493 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
08.08.2025, 04:53
Цитата Сообщение от volshebnik4 Посмотреть сообщение
driver.FindElementsByName("div").Attribu te("data-name")
Так ты выгребаешь все DIV'ы, а потом из всех пытаешься достать атрибут этот. Так не делается.

Тебе уже про XPath сказали. Его и надо использовать. Там можно будет сразу указать, что "я хочу из атрибута data-name элемента div вытащить значение".

Не трать своё время на ерунду. Сразу почитай про XPath.
1
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,700
Записей в блоге: 2
08.08.2025, 05:14
Самый быстрый должен быть поиск по id, поскольку id уникальны
0
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 08:19  [ТС]
testuser2, Так у этого атрибута id нет.

Добавлено через 15 минут
MikeVol, Судя по вашей миниатуре, ваш код хорошо и быстро нашёл у вас (у меня пусто, как я писал: не отображает). Но это, как я понимаю, спарсилось только с указанной страницы.

1. А как же со всего сайта собрать эти данные ? Там около 6 000 позиций примерно. 48 только на этой странице. Не менять же в
http.Open "GET", "https://autoshini.ru/podbor-shin", False
адрес постоянно.

2. И ваш код сайт пропустил почему-то. Отдал вам данные ) Или вы как-то обошли защиту сайта ? (если она есть)

А вот такой мой:

Visual Basic
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
Sub ПарсингChrome()
    Dim driver As New WebDriver ' Переменная будет новым вебдрайвером (инициализируется новый драйвер Селениум)
    driver.Start "Chrome" ' Открывается новая страница Chrome
    driver.Get "https://autoshini.ru/podbor-shin" ' Драйвер направляет к заданной странице
    Application.Wait Now + TimeValue("0:00:05") ' Ждём (Application.Wait приостанавливает дальнейшее действие макроса) 5 секунд, чтобы сайт полностью загрузился.
 
    
    Dim name As Object
    Dim price As Object
       
    Dim http As Object
    Dim html As Object
    
    Set html = CreateObject("HTMLFile")
    Set http = CreateObject("MSXML2.XMLHTTP")
    Application.Wait Now + TimeValue("0:01:00") ' Ждём (Application.Wait приостанавливает дальнейшее действие макроса) 5 секунд, чтобы сайт полностью загрузился.
    html.body.innerHTML = http.responseText
    
    MsgBox http.responseText
   
    ' Find elements by tag name
    Set productNames = html.getElementsByTagName("div")
   
    Debug.Print productNames(0).getAttribute("data-name")
    
    driver.Quit
 
End Sub
не пропускает. Не хочет даже код сайта выводить.
Миниатюры
Не парсится сайт  
0
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 08:32  [ТС]
MikeVol,
Цитата Сообщение от Usaga Посмотреть сообщение
Так ты выгребаешь все DIV'ы, а потом из всех пытаешься достать атрибут этот. Так не делается.
Я понял. Это неразумно и затратно. Спасибо.


Цитата Сообщение от Usaga Посмотреть сообщение
Тебе уже про XPath сказали. Его и надо использовать. Там можно будет сразу указать, что "я хочу из атрибута data-name элемента div вытащить значение".
Я пробовал его раньше, но пока не получалось: выдавало, что методы неверные. Попробую ещё раз.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
08.08.2025, 09:02
Цитата Сообщение от АЕ Посмотреть сообщение
Для обоих вариантов ваш сайт возвращает пустое значение.
Это был мой косяк. Я к адресу в конце слэш поставил. Без него прекрасно парсит...
1
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
08.08.2025, 09:11
Лучший ответ Сообщение было отмечено volshebnik4 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Получить_цену()
Dim myHtml As String, myFile As Object, myTag As Object, myTxt As String, l, i!, s$, x, r!
    s = GetHTML1("https://autoshini.ru/podbor-shin")
    Set myFile = CreateObject("HTMLFile")
        r = 2:    [A1] = "Наазвание":    [B1] = "Цена"
    l = Split(s, vbLf)
    For i = 1 To UBound(l)
        If InStr(1, l(i), "<div data-merchant=") > 0 Then
            x = Split(l(i), "data-")
            Cells(r, 1).Value = Right(x(5), Len(x(5)) - 5)
            Cells(r, 2).Value = Val(Right(x(6), Len(x(6)) - 7))
            r = r + 1
        End If
    Next
End Sub
Function GetHTML1(ByVal myURL As String) As String
On Error Resume Next
    With CreateObject("msxml2.xmlhttp")
        .Open "GET", myURL, False
        .send
        Do: DoEvents: Loop Until .readyState = 4
        GetHTML1 = .responseText
    End With
End Function
Благодарность можно и в кошелек
Миниатюры
Не парсится сайт  
1
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 09:24  [ТС]
АЕ, Хм ..... Как интересно. Действительно сработало, даже на моей "глючной", как тут подозревали, системе. Система Windows домашняя. Я понимаю, что она урезана, в отличии от Pro. Но разве настолько, чтобы не срабатывал Internet Explorer при вызове через VBA и не выводились данные в Эксель по строкам от некоторых кодов ? (как например от кода MikeVol).

Тогда подскажите, если можно, как всё-таки со всего сайта https://autoshini.ru собрать эти данные ? Там около 6 000 позиций примерно. 49 только на странице https://autoshini.ru/podbor-shin .
Не менять же в
http.Open "GET", "https://autoshini.ru/podbor-shin", False
адрес постоянно вручную. Это целый день будешь только заносить все страницы сайта, где есть данные по названию и цене.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
08.08.2025, 09:26
Цитата Сообщение от volshebnik4 Посмотреть сообщение
Тогда подскажите, если можно, как всё-таки со всего сайта https://autoshini.ru собрать эти данные ?
Можно.
1
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 09:45  [ТС]
АЕ, Я извиняюсь, этот код какие-то не те цены берёт. Сходу не пойму, откуда :
Миниатюры
Не парсится сайт   Не парсится сайт  
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
08.08.2025, 10:04
желание вам помогать тает как весенний снег...
Миниатюры
Не парсится сайт  
0
Одесса - Украина
 Аватар для MikeVol
523 / 201 / 70
Регистрация: 01.04.2020
Сообщений: 624
08.08.2025, 10:11
volshebnik4, Там и в моём коде не все цены вывело так как у некоторых шин есть 2 (две) цены. Хз как это побороть.
0
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 10:59  [ТС]
АЕ, Как так получается ? Ваша миниатюра на сходится с кодом сайта .... Я открываю страницу https://autoshini.ru/podbor-shin
Захожу правой кнопки мыши и "Просмотр кода страницы" и "Посмотреть код" : нигде поиском нет цифры 4490. Как же у вас такой код HTML сайта выдаётся ... ?
Миниатюры
Не парсится сайт   Не парсится сайт  
0
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 11:25  [ТС]
MikeVol,
Цитата Сообщение от MikeVol Посмотреть сообщение
Там и в моём коде не все цены вывело так как у некоторых шин есть 2 (две) цены.
Там вторая цена некорректная, скорее. Там где зелёным — верное. У красного нет индекса нагрузки и скорости: красный пустой квадратик.
Ниже покажу на снимках в миниатюре:
Миниатюры
Не парсится сайт  
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4180 / 2465 / 513
Регистрация: 13.12.2016
Сообщений: 8,386
Записей в блоге: 5
08.08.2025, 11:31
volshebnik4, не исключаю, что вызов цены из базы данных происходит в зависимости от местоположения IP адреса вызывающего. Но это не должно мешать из вежливости сказать спасибо помогающим. Есть даже кнопки для этого.
А то складывается впечатление, что общаюсь с невежей.
Миниатюры
Не парсится сайт  
1
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 11:36  [ТС]
MikeVol,
Цитата Сообщение от MikeVol Посмотреть сообщение
Хз как это побороть.
Это как раз несложно. Эта цена идёт в < span class. Она не нужна.

Другое дело, твоя вчерашняя цена тоже не сходится с сегодняшней. То ли поставщик изменил цену сегодня (не могу проверить): твой код у меня не хочет показывать. То ли так же, как у AE что-то не то загружается.
Миниатюры
Не парсится сайт   Не парсится сайт  
0
jump
 Аватар для I can
5005 / 4769 / 852
Регистрация: 13.04.2015
Сообщений: 10,017
08.08.2025, 11:52
Цитата Сообщение от volshebnik4 Посмотреть сообщение
То ли поставщик изменил цену сегодня
Возможно надо кэш очистить.

Добавлено через 2 минуты
API декларация очистки кэша

Visual Basic
1
Private Declare Function DeleteUrlCacheEntry Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
Вызов, что-то типа

Visual Basic
1
Call DeleteUrlCacheEntry("https://autoshini.ru/podbor-shin")
1
0 / 0 / 0
Регистрация: 08.10.2020
Сообщений: 42
08.08.2025, 12:19  [ТС]
Цитата Сообщение от АЕ Посмотреть сообщение
Но это не должно мешать из вежливости сказать спасибо помогающим. Есть даже кнопки для этого.
Большое спасибо !
Я собирался вам в личку написать потом. Как бы общение не закончилось, точнее, вопрос не завершился, я не обратил внимания, что под каждым сообщением можно благодарить. Сорри, спасибо за ликбез )

Добавлено через 25 минут
Цитата Сообщение от I can Посмотреть сообщение
Возможно надо кэш очистить.
Уфффф ..................... Вы разрешили проблему с неверной ценой ! .... Действительно, у меня из-за кеша выдавало неверную цену ......... Столько нюансов вылазит ....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2025, 12:19

Передача данных на Веб Сайт
Доброго время суток)))):) Пожалуйста помогите))):wall: 1).Как сделать так, чтобы при нажатии...

Сайт-учебник по программированию на Visual Basic 6 для начинающих
Программируем на Visual Basic - учебник для начинающих. Часть 1.написано доступным и живым языком,...

Как написать закачивальщик на сайт файлов??
есть сайт.есть к нему доступ по ФТП.есть файл который нужно периодически записывать на сайт...

Как в VB сделать ссылку на сайт?
Может кто это уже делал... Ну, надпись светится, рука появляется и грузится Explorer на нужной...

Как сделать в VB6 URLссылку на сайт??
Как сделать в VB6 URLссылку на сайт?? В любых примерах хоть с лейбла кто знает пишите всё.. 8о)


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru