Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
Собственно ворпос существуют ли инструменты ,как распарсить HTML страницу в динамичным контентом?
jsoup не умеет

сама страница https://www.stoloto.ru/ruslotto/game?int=right&lastdraw
код страницы на картинке
мне нужено достать id билета и цифры из таблиц

если я делаю это обычным jsoup парсером -я получаю пустоту

   Document doc = Jsoup.connect("https://www.stoloto.ru/ruslotto/game?int=right&lastdraw")
                .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
                .get();
        Elements ticketId=doc.select("tr.numbers");

получаем на выходе

<tr class="numbers"> 
 <td></td> 
 <td></td> 
 <td></td> 
 <td></td> 
 <td></td> 
 <td></td> 
 <td></td> 
 <td></td> 
 <td></td> 
</tr>


естественно значений нет - так как они вставляются туда скриптом


вот сам код изнутри

если кто то делал подобные вещи подскажите как это сделать в гуглах на эту тему ничего толкового нет

К сообщению приложен файл. Размер - 53Kb
22 окт 19, 10:54    [21999600]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
ivanra
Member

Откуда:
Сообщений: 868
в любом браузере есть интструменты разработчика. Посмотри, какие запросы идут на сервер, и выполни их сам. Скорее всего там будет json контент, который тебе и нужен
22 окт 19, 11:01    [21999608]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
asv79
естественно значений нет - так как они вставляются туда скриптом
код js на разные события (перемещение мышки) изменяет DOM.
Поэтому если не идет инфа на сервер, то достать невозможно. Ну или очень сложно.
Поэтому сам не делай динамичные сайты (одного окна).
22 окт 19, 11:09    [21999618]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
ivanra
в любом браузере есть интструменты разработчика. Посмотри, какие запросы идут на сервер, и выполни их сам. Скорее всего там будет json контент, который тебе и нужен

там запросы идут постоянно вот при обновлении билетов выловил вот этот запрос
https://s.stoloto.ru/service/bingo/ruslotto/change?callback=jQuery171010123521258160095_1571660062717&numbersToChange=[{"barCode":"999847030297"},{"barCode":"999847451294"},{"barCode":"999848565640"}]&_=1571731633691

который возвращает вот такой json
jQuery171010123521258160095_1571660062717({"status":"pending"});
22 окт 19, 11:13    [21999622]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
забыл ник
Member

Откуда:
Сообщений: 3048
PetroNotC Sharp
asv79
естественно значений нет - так как они вставляются туда скриптом
код js на разные события (перемещение мышки) изменяет DOM.
Поэтому если не идет инфа на сервер, то достать невозможно. Ну или очень сложно.
Поэтому сам не делай динамичные сайты (одного окна).


В данном случае номер билета врядли генерится на клиенте, он 100% приходит с сервера, либо в json запросе либо в теге скрипт. Поэтому достаточно узнать где он лжеит и просто выдрать оттуда
22 окт 19, 11:14    [21999623]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
PetroNotC Sharp
asv79
естественно значений нет - так как они вставляются туда скриптом
код js на разные события (перемещение мышки) изменяет DOM.
Поэтому если не идет инфа на сервер, то достать невозможно. Ну или очень сложно.
Поэтому сам не делай динамичные сайты (одного окна).

ну как то же эти цифры туда записываются?
значит все таки с сервера в виде json прилетают
не могу найти этот запрос в куче остальных
22 окт 19, 11:14    [21999624]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
asv79
не могу найти этот запрос в куче остальных
это самое простое. Ищи на F12
22 окт 19, 11:16    [21999626]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
забыл ник
PetroNotC Sharp
пропущено...
код js на разные события (перемещение мышки) изменяет DOM.
Поэтому если не идет инфа на сервер, то достать невозможно. Ну или очень сложно.
Поэтому сам не делай динамичные сайты (одного окна).


В данном случае номер билета врядли генерится на клиенте, он 100% приходит с сервера, либо в json запросе либо в теге скрипт. Поэтому достаточно узнать где он лжеит и просто выдрать оттуда

да я думаю это так и есть-а вот как узнать?)
22 окт 19, 11:16    [21999629]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
asv79,
Хром, F12 - найти где в коде изменяется div
- Elements
- ПКМ на div
- Break on - Attribute modifications
22 окт 19, 11:18    [21999631]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
asv79
как узнать?
работать за JS прогера. Ты же не хотел всего месяц назад)))
22 окт 19, 11:19    [21999632]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
нашел там json

jQuery171010123521258160095_1571660062720({"status":"ok","combinations":[{"barCode":"999848718755","number":"999848718755","numbers":[25,32,66,77,85,10,44,52,62,90,8,15,45,58,70,7,22,37,75,86,3,21,53,63,73,19,30,47,55,81],"favouriteNumbers":[]},{"barCode":"999848087099","number":"999848087099","numbers":[6,42,66,76,83,35,41,54,64,78,8,13,20,38,81,5,14,25,65,90,21,33,44,60,85,7,39,46,55,71],"favouriteNumbers":[]},{"barCode":"999848722212","number":"999848722212","numbers":[7,30,56,66,85,29,39,42,50,67,1,12,41,71,84,8,23,36,43,60,10,48,59,70,80,4,19,55,62,74],"favouriteNumbers":[]},{"barCode":"999860109563","number":"999860109563","numbers":[2,10,33,58,82,15,27,37,61,70,29,40,55,78,90,3,18,24,35,43,1,36,64,77,87,14,46,51,63,80],"favouriteNumbers":[]},{"barCode":"999860072050","number":"999860072050","numbers":[10,44,51,64,85,11,37,66,76,89,8,27,35,57,79,5,45,59,78,83,9,25,31,56,87,15,23,39,41,60],"favouriteNumbers":[]},{"barCode":"999848588319","number":"999848588319","numbers":[10,21,43,67,74,31,46,51,77,83,7,26,53,65,88,19,25,38,45,80,6,41,50,62,70,2,23,32,69,85],"favouriteNumbers":[]},{"barCode":"999847498971","number":"999847498971","numbers":[5,21,48,65,86,29,39,51,62,73,15,37,46,53,75,11,31,45,58,68,27,38,40,76,87,9,55,69,71,89],"favouriteNumbers":[]},{"barCode":"999860054501","number":"999860054501","numbers":[10,33,58,70,84,13,20,34,52,68,2,40,64,76,88,6,22,30,65,72,12,26,31,66,83,5,19,42,56,81],"favouriteNumbers":[]},{"barCode":"999848715475","number":"999848715475","numbers":[7,39,55,63,75,12,23,42,53,77,5,27,33,45,90,24,41,59,68,71,2,19,36,72,80,10,35,52,62,88],"favouriteNumbers":[]},{"barCode":"999859451268","number":"999859451268","numbers":[19,33,46,78,87,11,31,51,65,80,6,20,42,54,77,26,48,62,72,90,4,25,39,75,81,15,37,49,58,68],"favouriteNumbers":[]}]});




я так понял прилетает он после вот этого запроса
https://s.stoloto.ru/service/bingo/ruslotto/change?callback=jQuery171010123521258160095_1571660062718&numbersToChange=[{"barCode":"999847030297"},{"barCode":"999847451294"},{"barCode":"999848565640"}]&_=1571731634332

в браузере этот запрос ничего не дает
вот как выудить этот json?
22 окт 19, 11:31    [21999644]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
ivanra
Member

Откуда:
Сообщений: 868
asv79,
надо смотреть тип запроса, скорее всего это POST. Плюс, скорее всего, куки. Так что следующий этап - SoapUI и отладка всех этих запросов.
Есть еще вариант - поуправлять браузером и брать из него готовое. Но это в ветку C#
22 окт 19, 11:36    [21999651]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
asv79
вот как выудить этот json?
повторить запрос уже от себя?
22 окт 19, 11:41    [21999656]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
asv79,
Ты копай давай. Что ты описываешь действия твоей руки)).
22 окт 19, 11:43    [21999660]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
да вообщем нашел я запрос

он отдает мне json
вот запрос

https://s.stoloto.ru/service/bingo/ruslotto/change?callback=jQuery171010123521258160095_1571660062730&numbersToChange=[{"barCode":"999847030297"},{"barCode":"999847451294"},{"barCode":"999848565640"}]&_=1571733298168

причем самое интересное я думал он будет давать те же билеты,но нет-дает всегда новые
но почему то запрос нужно отправлять два раза
сначала приходит статус -pending
еще раз запрос отправляешь -прилетает json с билетами

вообщем теперь уже можно это дело автоматизировать )
22 окт 19, 11:49    [21999666]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
ivanra
asv79,
надо смотреть тип запроса, скорее всего это POST. Плюс, скорее всего, куки. Так что следующий этап - SoapUI и отладка всех этих запросов.
Есть еще вариант - поуправлять браузером и брать из него готовое. Но это в ветку C#

не нормально - нашел я этот запрос,получаю json
плохо что запрос нужно два раза делать


пс.я вот думаю я по шапке то не получу от СТОЛОТО? ведь я могу их сервер положить если сделаю выборку например 100 000 билетов?)
22 окт 19, 11:51    [21999668]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
asv79,
Конечно вмешательство незаконно.
За тобой уже выехали.
Удачи!
22 окт 19, 12:00    [21999680]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
PetroNotC Sharp,
)))
22 окт 19, 12:07    [21999688]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
olegeos
Member

Откуда:
Сообщений: 166
phantomjs предлагали?
22 окт 19, 12:15    [21999694]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
olegeos,
неа,да уже и не надо
я нашел запрос -получаю json в котром все что мне надо

но есть одна проблема

если я вставлю этот заппрос в браузер - то получаю норм ответ

если через постмен или java code то получаю стус-еррор
22 окт 19, 12:19    [21999698]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
ivanra
Member

Откуда:
Сообщений: 868
asv79
если я вставлю этот заппрос в браузер - то получаю норм ответ
если через постмен или java code то получаю стус-еррор

Посмотри в браузере - наверняка там еще заголовки/куки передаются
22 окт 19, 12:28    [21999707]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
ivanra
asv79
если я вставлю этот заппрос в браузер - то получаю норм ответ
если через постмен или java code то получаю стус-еррор

Посмотри в браузере - наверняка там еще заголовки/куки передаются


передается

вот оно
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 64
Content-Type: application/javascript;charset=utf-8
Date: Tue, 22 Oct 2019 09:32:10 GMT
Expires: 0
Last-Modified: Mon, 26 Jul 1997 05:00:00 GMT
Pragma: no-cache
Server: nginx
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Cookie: K=1571642393849; _ga=GA1.2.555634147.1571642396; _gid=GA1.2.1790512847.1571642396; _ym_uid=1571642396502481532; _ym_d=1571642396; _vwo_uuid_v2=D743B9A20B0FA987CC2E39AC6F7BA09B2|94fca6ec37493d710643e3e05cc3dc6b; __auc=354d77d216ded2fcd7d2e3ebf87; _fbp=fb.1.1571642397269.2005321185; SESSION=3af0ffac-8547-44ae-bebf-2a169b174b6a; ga=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJycyI6WyJDVVNUT01FUiIsIlVTRVIiXSwibG9jIjoicnUiLCJydiI6IlNJVEUiLCJmbiI6ItCh0YLQsNC90LjRgdC70LDQsiIsImRuIjoi0KHRgtCw0L3QuNGB0LvQsNCyIiwic2VnIjo0LCJleHAiOjE1NzE2NTAxMDYsInZpcCI6ZmFsc2UsImFwbCI6MjAwLCJtbCI6ImFzdl83OUBpbmJveC5ydSIsInN0IjoiUkVHSVNURVJFRCIsIm9yIjoiU1RPTE9UTyIsImMiOiJSVSIsImFwdCI6IllFUyIsImYiOnRydWUsImlwIjoiMTQ0LjM2LjI0MS4xMzEiLCJpIjoyMDgyMjA4NTA4LCJmcHQiOiJCT05VUyxXQUxMRVQiLCJsIjoiYXN2Xzc5QGluYm94LnJ1IiwibSI6Ijc5MjA2OTA4ODk2IiwidmQiOmZhbHNlLCJvIjp0cnVlLCJyZCI6MTU0NjM0MzY3MjU3NiwidyI6MTU4MzE4MDE0NjQ4LCJzY3BvIjpmYWxzZSwiZmJ5IjoyMDE5fQ.6gGR2DvDjMGbrWW0jJDBF3sArsvvk78aW5KbgM8Itmw
Host: s.stoloto.ru
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36


и что делать
22 окт 19, 12:34    [21999713]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
забыл ник
Member

Откуда:
Сообщений: 3048
asv79
ivanra
пропущено...

Посмотри в браузере - наверняка там еще заголовки/куки передаются


передается

вот оно
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 64
Content-Type: application/javascript;charset=utf-8
Date: Tue, 22 Oct 2019 09:32:10 GMT
Expires: 0
Last-Modified: Mon, 26 Jul 1997 05:00:00 GMT
Pragma: no-cache
Server: nginx
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Cookie: K=1571642393849; _ga=GA1.2.555634147.1571642396; _gid=GA1.2.1790512847.1571642396; _ym_uid=1571642396502481532; _ym_d=1571642396; _vwo_uuid_v2=D743B9A20B0FA987CC2E39AC6F7BA09B2|94fca6ec37493d710643e3e05cc3dc6b; __auc=354d77d216ded2fcd7d2e3ebf87; _fbp=fb.1.1571642397269.2005321185; SESSION=3af0ffac-8547-44ae-bebf-2a169b174b6a; ga=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJycyI6WyJDVVNUT01FUiIsIlVTRVIiXSwibG9jIjoicnUiLCJydiI6IlNJVEUiLCJmbiI6ItCh0YLQsNC90LjRgdC70LDQsiIsImRuIjoi0KHRgtCw0L3QuNGB0LvQsNCyIiwic2VnIjo0LCJleHAiOjE1NzE2NTAxMDYsInZpcCI6ZmFsc2UsImFwbCI6MjAwLCJtbCI6ImFzdl83OUBpbmJveC5ydSIsInN0IjoiUkVHSVNURVJFRCIsIm9yIjoiU1RPTE9UTyIsImMiOiJSVSIsImFwdCI6IllFUyIsImYiOnRydWUsImlwIjoiMTQ0LjM2LjI0MS4xMzEiLCJpIjoyMDgyMjA4NTA4LCJmcHQiOiJCT05VUyxXQUxMRVQiLCJsIjoiYXN2Xzc5QGluYm94LnJ1IiwibSI6Ijc5MjA2OTA4ODk2IiwidmQiOmZhbHNlLCJvIjp0cnVlLCJyZCI6MTU0NjM0MzY3MjU3NiwidyI6MTU4MzE4MDE0NjQ4LCJzY3BvIjpmYWxzZSwiZmJ5IjoyMDE5fQ.6gGR2DvDjMGbrWW0jJDBF3sArsvvk78aW5KbgM8Itmw
Host: s.stoloto.ru
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36


и что делать

Очевидно передавать те же заголовки и куки.
22 окт 19, 12:37    [21999717]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
ivanra
Member

Откуда:
Сообщений: 868
можно взять готовый куки хендлер, но для тебя скорее всего важен только SESSION - его можно обработать и вручную. Пока можешь просто скопировать куки-заголовок из браузера в код и посмотреть, что этого достаточно (браузер при этом не закрывай)
22 окт 19, 12:44    [21999729]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг динамического контента  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
ivanra
можно взять готовый куки хендлер, но для тебя скорее всего важен только SESSION - его можно обработать и вручную. Пока можешь просто скопировать куки-заголовок из браузера в код и посмотреть, что этого достаточно (браузер при этом не закрывай)

спсибо дружище) все заработало )
22 окт 19, 13:03    [21999764]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Java Ответить