LINUX.ORG.RU

Парсинг работы javascript на html странице через bash-скриптинг

 , , ,


0

1

Всем доброго времени суток!

Стоит задача у себя на сервере организовать запись кодов видео со стороннего сайта в файл по крону. Код видео со страницы - это составляющая плейлиста вида http://ip/edge0/xrecord/code_video/prog_index.m3u8

На страницах стороннего сайта код видео в DOM строится разумеется java скриптом.

Какие есть варианты парсинга элементов DOM клиентской части в консоли сервера Ubuntu? Существует ли более-менее простой способ для этого? Обладаю базовыми знаниями php, bash.



Последнее исправление: RamonNomar (всего исправлений: 1)

пхп, баш — мишн импосибл.

Тебе дорога в нодку, например. И еще типа этого щас придут насоветуют.

deep-purple ★★★★★
()

если бы ты указал URL этого стороннего сайта с кодами видео, то, возможно, кто-нибудь смог бы предложить быстрый хак простыми средствами, а так задача слишком общая.

anonymous
()

chrome-headless

Deleted
()

На страницах стороннего сайта код видео в DOM строится разумеется java скриптом.

Так посмотрите, может там js дергает какой-то определенный урл чтоб получить список видео, да и не нужно будет ничего парсить. Опять же, если данные есть в этом скрипте то можно те же регулярки использовать, чтоб выдрать нужное. В общем вам действительно проще всего дать ссылку на сайт.

micronekodesu ★★★
()
Ответ на: комментарий от anonymous

URL https://sportstream365.com/football вообщем на этом конкретном сайте у них через wss сокеты данные js подгружает, попробовал phantom-js, ничего не вышло и не сталкивался я с сокетами от слова совсем.

Хорошо что у них есть ещё один сайт с этими же видео трансляций, там я с помощью curl на php обычным способом распарсил.

<?php
error_reporting(0);
//Json sending parameters
$lang = array("Language"=>"en");
$date = date('Y-m-d');
$params = array(
"Params" => array(
$date, null, 4, null, null, 180
)
);
$vers = array("Vers"=>6);
$adult = array("Adult"=>false);
$lang = json_encode($lang);
$params = json_encode($params);
$vers = json_encode($vers);
$adult = json_encode($adult);
$data_string = $lang.$params.$vers.$adult;
  //Connect to post json query
  $ch = curl_init('https://domain.com/getTranslate/ViewGameResultsGroup');
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
      'Content-Type: application/json',                                                                                
      'Content-Length: ' . strlen($data_string))                                                                       
  );  
  $result = curl_exec($ch);
  curl_close($ch);

  $stdClass = json_decode($result);
  //print_r($stdClass);
  //Big array of data from server response
  $array = json_decode(json_encode($stdClass), true);
  
  $data = $array["Data"][0]["Elems"];
  //print_r($data);
  foreach($data as $big_array => $arr) {
    foreach($arr  as  $inn_arr => $val_arr){
        foreach($val_arr as $key => $value){
            if ($value['Head'][10] > 1){
              //Game id
              $id = $value['Head'][0];
              //Tournament name
              $tournament = $value['Head'][35];
              //Time of match
              $t = date('h:m', $value['Head'][7]);
              //First opponent
              $one = $value['Head'][33];
              //Second opponent
              $two = $value['Head'][34];
              //Game score
              //$score = $value['Head'][32];
              $score = $value['Head'][32];
              $score = preg_replace('/\s\(\d{12,}\)/', '', $score);
              //var_dump($score);
              //Video id
              $vid = $value['Head'][10];
              $string = '|'.$id.'|'.$tournament.'|'.$one.' - '.$two.'|'.$t.'|'.$score.'|'.$vid.'|'.'\n';
              file_put_contents('bd', $string, FILE_APPEND);
            }
        }
  }
}
Всем спасибо за ответы.

RamonNomar
() автор топика

я обычно делаю подобное через связку selenium-docker + python

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.