Действительно ли возможно получить текст от веб-сайта в терминале

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

Таким образом, кажется, что моя школа использует FullCalendar для установки расписания, таким образом, времена не являются HTML-тэгами в .html файле.

-1
задан 13 December 2018 в 05:36

2 ответа

Поскольку у нас нет реального веб-сайта, из которого Вы хотите очистить данные, и очистка веб-сайта всегда отличается, если Вы не имеете, некоторые стандартизировали API, не возможно дать 100% рабочее решение. Но я попытаюсь объяснить способ добраться до Вашей информации.

fullcalender.io базирующийся JavaScript, события настраиваются как объект JavaScript или могут быть импортированы из json формат. Если последний имеет место, можно легко просто загрузить готовое json файл, который упомянут где-нибудь в исходном коде JavaScript. Относительно парсинга json, существует много Вопросов и Ответов здесь.

Если это настраивается как Объект JavaScript, можно просто проанализировать .js файл или если это включено в HTML <script> тег, проанализируйте HTML для $('#calendar').fullCalendar( объект.

Мы можем использовать curl для получения веб-сайта затем извлеките информационное использование, например. awk.


Я сделал маленький сценарий для получения объекта для fullcalender.io Основная демонстрация Представления. Ваш сценарий может выглядеть подобным.

curl -s https://fullcalendar.io/releases/fullcalendar/3.9.0/demos/basic-views.html \
  | awk '/\.fullCalendar\(\{/{s=1; print "{"; next;};
         /\}\)\;/{s=0};
         s{print};
         END{print "}";}'

Объяснение:

  • /\.fullCalendar\(\{/{s=1; print "{"; next;}; Поиски .fullCalender({ и если найденный переменной наборов s=1 и печать {
  • /\}\)\;/{s=0}; Поиски )}; и переменная наборов s=0
  • s{print}; печатает строку если s установлен а не 0.
  • END{print "}";}' печать } в конце.

Вывод:

{
  header: {
    left: 'prev,next today',
    center: 'title',
    right: 'month,basicWeek,basicDay'
  },
  defaultDate: '2018-03-12',
  navLinks: true, // can click day/week names to navigate views
  editable: true,
  eventLimit: true, // allow "more" link when too many events
  events: [
    {
      title: 'All Day Event',
      start: '2018-03-01'
    },
    {
      title: 'Long Event',
      start: '2018-03-07',
      end: '2018-03-10'
    },
    {
      id: 999,
      title: 'Repeating Event',
      start: '2018-03-09T16:00:00'
    },
    {
      id: 999,
      title: 'Repeating Event',
      start: '2018-03-16T16:00:00'
    },
    {
      title: 'Conference',
      start: '2018-03-11',
      end: '2018-03-13'
    },
    {
      title: 'Meeting',
      start: '2018-03-12T10:30:00',
      end: '2018-03-12T12:30:00'
    },
    {
      title: 'Lunch',
      start: '2018-03-12T12:00:00'
    },
    {
      title: 'Meeting',
      start: '2018-03-12T14:30:00'
    },
    {
      title: 'Happy Hour',
      start: '2018-03-12T17:30:00'
    },
    {
      title: 'Dinner',
      start: '2018-03-12T20:00:00'
    },
    {
      title: 'Birthday Party',
      start: '2018-03-13T07:00:00'
    },
    {
      title: 'Click for Google',
      url: 'http://google.com/',
      start: '2018-03-28'
    }
  ]
}

Можно затем проанализировать объект JS к объекту JSON использование Python и demjson:

Установка demjson:

pip3 install demjson

и затем выполненный это:

curl -s https://fullcalendar.io/releases/fullcalendar/3.9.0/demos/basic-views.html \
  | awk '/\.fullCalendar\(\{/{s=1; print "{"; next;};
         /\}\)\;/{s=0};
         s{print};
         END{print "}";}' \
  | python3 -c "import demjson, sys, json; print(json.dumps(demjson.decode('\n'.join(sys.stdin.readlines()))));" \
  | jq ".events"

Отсюда должно быть довольно легко переместиться в использование jq. Конечно, вместо bash и jq можно выполнить во всем этом Python.

4
ответ дан 26 October 2019 в 20:56

websync колотят использование сценария wget для получения ответов здесь в Спрашивают Ubuntu. Это ищет HTML-тэги для нахождения Вопроса Upvotes и Ответом Upvotes. Это преобразовывает специальные символы HTML такой как &amp кому: & и &lt кому: <, и т.д.

Вот несколько отрывков из кода, который можно найти полезным:

LineOut=""
HTMLtoText () {
    LineOut=$1  # Parm 1= Input line
    LineOut="${LineOut//&amp;/&}"
    LineOut="${LineOut//&lt;/<}"
    LineOut="${LineOut//&gt;/>}"
    LineOut="${LineOut//&quot;/'"'}"
    LineOut="${LineOut//&#39;/"'"}"
    LineOut="${LineOut//&ldquo;/'"'}"
    LineOut="${LineOut//&rdquo;/'"'}"
} # HTMLtoText ()

Ampersand=$'\046'

(... SNIP LINES ...)

while IFS= read -r Line; do

(... SNIP LINES ...)

# Convert HTML codes to normal characters
HTMLtoText $Line
Line="$LineOut"

(... SNIP LINES ...)

done < "/tmp/$AnswerID"

(... SNIP LINES ...)

wget -O- "${RecArr[$ColWebAddr]}" > "/tmp/$AnswerID"
if [[ "$?" -ne 0 ]]               # check return code for errors
  then
    # Sometimes a second attempt is required. Not sure why.
    wget -O- "${RecArr[$ColWebAddr]}" > "/tmp/$AnswerID"
fi
if [[ "$?" == 0 ]]               # check return code for errors
  then
      echo "$BarNo:100" > "$PercentFile"
      echo "$BarNo:#Download completed." > "$PercentFile"
  else
      echo "$BarNo:100" > "$PercentFile"
      echo "$BarNo:#Download error." > "$PercentFile"
      echo "ERROR: $AnswerID" >> ~/websync.log
      return 1
fi
0
ответ дан 26 October 2019 в 20:56

Другие вопросы по тегам:

Похожие вопросы: