#php #web-scraping #file-get-contents #simple-html-dom
Вопрос:
Я пытаюсь получить результат игры в крикет (он обновляется в режиме реального времени), и для получения результата я использую синтаксический анализатор HTML dom. Все работает отлично, за исключением повторения предыдущих значений. Иногда он извлекает предыдущую оценку, которая уже была получена. Что-то вроде этого
10 Баллов, 15 баллов, 10 баллов (повтор), 15 баллов (повтор)
Я провел много исследований и перепробовал множество различных способов решения этой проблемы, но ничего не вышло. В случае, если вы думаете, что это проблема с кешем, нет, это не так (я уже проверил это)
clearstatcache();
$url = 'https://www.example.in/scoreboard';
$cricket = file_get_html($url . '?nocache='. time());
$score = $cricket->find('.team-score',0)->plaintext; // sometimes echo the previous value
Комментарии:
1. Не могли бы вы показать нам образец оригинального HTML, пожалуйста ?
2. Какое отношение к этому имеет HTML? Это скорее бэкэнд @Camille
3. Я имею в виду, что » example.in/scoreboard » HTML-код, который вы анализируете, чтобы мы могли видеть, как устроены исходные элементы dom.
4. Я прикрепил скриншот этого! Вы можете проверить это @Camille
5. Вполне уверен, что это частный API-интерфейс, вы должны быть осторожны с его использованием. Прежде чем попробовать огромный инструмент скребок, всегда проверяйте загрузку файлов/скриптов, это просто, с Chrome, Инспектор > Сеть ! i.stack.imgur.com/L6iRi.jpg Сначала это может быть немного запутанно, но вы, вероятно, найдете то, что хотите, для каждой страницы.
Ответ №1:
Вероятно, это очень загруженный сайт, который вы просматриваете. Может быть, потому, что многие люди очень часто соскабливают его?
В любом случае, сайты, которые очень заняты, используют ряд методов, чтобы обслуживать так много людей/роботов. Балансировка нагрузки между различными серверами, кэширование в разных местах и многое-многое другое.
Поскольку Интернет в основном не имеет состояния, ваш сервер может извлекать данные из разных ресурсов и получать ответы, которые не расположены в хронологическом порядке. Особенно если вы проводите опрос очень быстро.
Помните, что этот веб-сайт не несет ответственности за предоставление вам этих страниц в хронологическом порядке. Все, что ему нужно сделать,-это обслуживать их быстро и как можно более современно.
Комментарии:
1. Да, я использую методику длительного опроса (нажимайте на URL-адрес каждые 2 секунды, чтобы увидеть, есть ли какие-либо изменения в результатах). Итак, есть ли какое-либо решение этой проблемы? есть какие-нибудь рекомендации?
2. Решение состоит в том, чтобы использовать ресурс, специально разработанный для предоставления последних результатов в крикете. Возможно, на том веб-сайте, который вы опрашиваете, есть API для этого? Помните, что как только веб-мастер обнаружит, что вы делаете, он может заблокировать вас. Это может даже произойти автоматически. Я делаю это на своих сайтах, иначе роботы вызывают 95% всего трафика, за который мне приходится платить.
3. Понял! Нет, на веб-сайте нет официального API (вот почему я использовал технику очистки), и спасибо, что ответили на мой вопрос
4. @anonymous: «переходите по URL — адресу каждые 2 секунды» — кстати, это называется «короткий опрос». Длительный опрос-это когда вы запрашиваете у сервера обновления, а сервер ждет, пока он вам их не выдаст. И клиент ждет ответа. Возможно, надолго. Отсюда и название — «длительный опрос». Естественно, это требует активного сотрудничества с сервером.
5. Является ли это более эффективным по сравнению с коротким опросом? Я думаю, это тоже связано с JS? Разве мне не нужно было бы по-прежнему нажимать на URL-адрес, чтобы узнать, не произойдет ли каких-либо изменений? @Сергиотуленцев