Кибор » Скрипты на заказ » Заказать скрипт » Куплю решение, как запарсить сайт bdocodex.com

Страниц (1): [1]
 

1. Kostick - 21 Апреля, 2024 - 16:37:08 - перейти к сообщению
Есть сайт bdocodex.com и есть таблица в Google Sheets. С помощью команды "=IMPORTXML" хочу вывести цену предмета, который необходим, в ячейку. Нашел, что если в ячейке A1 ввести, например "https://bdocodex.com/ru/item/11834/#3", в ячейке А2 "//td", а в ячейке А3 "=IMPORTXML(А1;А2)", то выведится информация о предмете. В ячейке AB5 будет текст
CODE:
var
real_item_prices={"prices":{"RU":[["28900000","125"],["68000000","12"],["306000000","29"],["975000000","8"],["4630000000","3"],["27500000000","2"]]},"token":"a2a84f37a5bde586eb33aef9740d1b5d"};

В нем в квадратных скобках есть информация в виде "цена; количество предмета на аукционе". В каждых скобках цена в зависимости от уровня заточки от +0 до +5, т.е. 5 таких групп.
Так же есть индивидуальный токен для каждого предмета и ссылка на цену под названием "id=real_price".
Мне нужно создать таблицу, в которой я бы мог ввести в ячейку А1 - название предмета, в В1 - уровень заточки, а мне выдало бы в ячейке А2 - цену этого предмета, в ячейке А3 - количество предмета на аукционе.
Но я не могу придумать, как это реализовать. Прошу вашей помощи.
Также есть пост на форуме сайта с вопросом про парсинг цен на аукционе:(для просмотра ссылки Вам необходимо авторизоваться)
2. Zireael - 21 Апреля, 2024 - 18:19:53 - перейти к сообщению
Было бы проще если знать ID всех предметов. Обычно в файлах игры есть файл, в котором есть эти данные.
Толку от названия предмета мало. Даже если через селениум использовать поиск на сайте, то введя Серьги Карнака, получим несколько ссылок на предметы с таким названием, но разным ID.
3. Kostick - 21 Апреля, 2024 - 19:08:51 - перейти к сообщению
Да, есть ID всех предметов, который совпадает с ID на сайте
Вот таблица:(для просмотра ссылки Вам необходимо авторизоваться) Чтобы изменить регион и язык на "Ru", зайдите в "Файл" и создайте копию.
Вот пример таблицы, где я попытался получить данные:(для просмотра ссылки Вам необходимо авторизоваться) (Добавление)
Но это пример только для одного предмета. А нужно, чтобы можно было найти информацию для нескольких предметов на одном листе
(Добавление)
Т.е. по сути нужно упаковать все формулы в одну и записать в одной ячейке, если я правильно понимаю
(Добавление)
Немного изменил поиск данных с сайта:
Вместо "//td" ищу через "//td//script". Получаю:
CODE:
var
real_item_prices={"prices":{"RU":[["28900000","125"],["68000000","12"],["306000000","29"],["975000000","8"],["4630000000","3"],["27500000000","2"]]},"token":"a2a84f37a5bde586eb33aef9740d1b5d"};

Теперь нужно найти данные между "{"RU":[" и "]}", при этом в зависимости от уровня заточки, для +0 это будут данные между первыми двумя скобками:
["28900000","125"]
Для +1 между вторыми:
["68000000","12"]
Но я не могу придумать регулярное выражения, чтобы вычленять данные именно из определенных скобок.
4. Kostick - 22 Апреля, 2024 - 03:52:14 - перейти к сообщению
Ответ разработчика сайта, как он получил информацию с аукциона:
 Цитата:
Это очень просто на самом деле:
1. Зайдите на оф. сайт игры в раздел "Центральный аукцион".
2. Откройте в браузере инструменты разработчика и переведите его в режим мобильного устройства.
3. Перегрузите страницу и аукцион заработает.
4. Далее просто откройте в инструментах разработчика вкладку Network и смотрите, какие запросы игра посылает при просмотре данных по предметам, и что сервер выдаёт в ответ.

Таким образом вы увидите все команды для получения цен с аукциона и сможете использовать их в своих целях.

Есть web-интерфейс аукциона
(для просмотра ссылки Вам необходимо авторизоваться) Чтобы его использовать, нужно зарегистрироваться на сайте www.ru.playblackdesert.com, и активировать двухфакторную аутентификацию, чтобы можно было его использовать.
Буду пробовать парсить его.
5. Zireael - 22 Апреля, 2024 - 04:25:42 - перейти к сообщению
Обязательно через таблицы делать?
Можно через PowerShell.
6. Kostick - 22 Апреля, 2024 - 09:42:41 - перейти к сообщению
 Zireael пишет:
Обязательно через таблицы делать?
Можно через PowerShell.

Я никогда не пользовался PowerShell'ом. К тому же это общедоступная таблица, которой пользуюсь не я один, поэтому да, предпочтительно в Google sheets.
И если через PowerShell, то можно потом будет перевести информацию в таблицу, чтобы она автообновлялась?
(Добавление)
Мне бы теперь разобраться, как вычленять информацию из web-интерфейса аукциона. Там мало того, что нет никаких XPath, так еще и двухфакторную аутентификации с паролем авторизации нужно как-то передавать.
(Добавление)
В общем нормально, с помощью костылей обошелся без web-интерфейса аукциона и собрал данные с сайта bdocodex.com, как изначально и планировал. В таблице продемонстрировал.
Но если Вы поможете разобраться, как работать с web-интерфейсом, буду очень благодарен!
(Добавление)
Могу даже дать логин, пароль, и код аутентификации, если вам не хочется заморачиваться с регистрацией. Я сам его создал только для аукциона.
7. Kostick - 23 Апреля, 2024 - 11:38:12 - перейти к сообщению
 Zireael пишет:
Обязательно через таблицы делать?
Можно через PowerShell.

Zireael, а вы можете помочь с вопросом по поводу получения данных через Web-интерфейс?
Я так понял, можно написать программу, которая бы отправляла запросы на сервер и принимала ответы с сервера. Но я не знаю, с чего начать.
8. Kostick - 23 Апреля, 2024 - 15:05:34 - перейти к сообщению
Чтобы отправлять и принимать запросы, воспользовался программой Postman.
Заметил, что при заходе на сайт, я получаю токен. С ним, логином и паролем авторизуюсь. Далее мне снова присваивается другой токен, с ним и ОТР я прохожу двухфакторную аутентификацию.
Скриншот тела запроса, который я отправляю, когда нажимаю кнопку "Вход":(для просмотра ссылки Вам необходимо авторизоваться) (Добавление)
Вроде вот что получилось:
При отправке логина и пароля:
POST на адрес:(для просмотра ссылки Вам необходимо авторизоваться) Тело:
__RequestVerificationToken: токен
_returnUrl: https%3a%2f%2ftrade.ru.playblackdesert.com%2fauthCallback
_email: morozovkv8@gmail.com
_password: пароль

При отправке ОТР:
POST на адрес:(для просмотра ссылки Вам необходимо авторизоваться) Тело:
__RequestVerificationToken: pozyQXSSje6o3PukcYj2DUq4Ugv-QZmn8u_jJ0f4UNHxFkB4xXcbRHA02bFN7zr-aakyQkSNgAFGg6jpiKh-YdcmAMvJrSMbfMC_fKIxQis1
_returnUrl:(для просмотра ссылки Вам необходимо авторизоваться) isOtpBackupCode: false
otpKey: код отр

При вводе пин-кода:
POST на адрес:(для просмотра ссылки Вам необходимо авторизоваться) Тело:
__RequestVerificationToken: gC2ZpJsY80aSCnPSinCZ_nLLRmtphK9zHUlX8pWAJ2iS3sDkhZLGkMi4g9FDNb-IcuJXCWnk26r23gwtdQEmAszTX7Ty5hG1wJn7WtVdBeA1
secondPwd: пин-код
9. Kostick - 24 Апреля, 2024 - 02:46:24 - перейти к сообщению
Теперь понял, что не нужно было проходить никакую авторизацию, потому что POST-запрос спокойно отправляется и без нее на сервер.
Я теперь просто не могу придумать, как "перемещаться" по аукциону. Потому что чтобы вызвать команду "покупка", я нажимаю мышью, но при этом будто ничего не отсылается на сервер, а только приходит. Т..е. GET'а нет, только POST в виде уже результата.
И еще нужно это все реализовать на Python'е, чтобы потом вставить в Kibor, и из Kibor'а отправлять полученные с сервера данные в мою Google-таблицу
10. Kostick - 29 Апреля, 2024 - 10:30:26 - перейти к сообщению
Хотя нет, ошибся, без авторизации просто не получается в дальнейшем получать данные кроме главной страницы, пишет:
 Цитата:
Веб-аукцион доступен, если склад аукциона в игре был использован хотя бы раз.

Powered by ExBB FM 1.0 Final