Разбор строк с живого потокового сайта в Python - PullRequest
1 голос
/ 01 мая 2011

Я пытаюсь прочитать информацию, которая постоянно меняется с веб-сайта.

Например, скажем, я хотел прочитать имя исполнителя, которое играет на сайте онлайн-радио. Я могу получить имя текущего исполнителя, но когда песня меняется, HTML обновляется, и я уже открыл файл с помощью:

f = urllib.urlopen ("САЙТ")

Так что я не вижу обновленного имени исполнителя для новой песни.

Могу ли я продолжать закрывать и открывать URL в цикле while (1), чтобы получить обновленный HTML-код, или есть лучший способ сделать это? Спасибо!

Ответы [ 3 ]

1 голос
/ 01 мая 2011

Если вы используете urllib2, вы можете прочитать заголовки, когда делаете запрос. Если сервер отправляет обратно «304 Not Modified» в заголовках, то содержимое не изменилось.

1 голос
/ 01 мая 2011

Вам придется периодически перезагружать сайт. Не делайте это постоянно, потому что это будет слишком сложно для сервера.

Это потому, что HTTP по своей природе не является потоковым протоколом. Как только вы подключитесь к серверу, он ожидает, что вы сгенерируете на него HTTP-запрос, а затем сгенерирует ответ HTTP обратно на вас, содержащий страницу. Если ваш первоначальный запрос поддерживается (по умолчанию используется HTTP / 1.1,), вы можете снова выдать тот же запрос и обновить страницу.

Что я бы порекомендовал? В зависимости от ваших потребностей, переходите на страницу каждые n секунд, получайте нужные данные. Если сайт предоставляет API, вы можете воспользоваться этим. Также, если это ваш собственный сайт, вы можете реализовать Ajax в стиле комет через HTTP и получить истинный поток.

Также обратите внимание, что если это чужая страница, возможно, сайт использует Ajax через Javascript, чтобы обновлять ее; это означает, что есть другие запросы, вызывающие обновление, и вам может понадобиться проанализировать веб-сайт, чтобы выяснить, какие запросы вам нужно сделать, чтобы получить данные.

0 голосов
/ 01 мая 2011

Да, это правильный подход. Чтобы получать изменения в Интернете, вы должны каждый раз отправлять новый запрос. Живые AJAX-сайты делают то же самое внутри.

Некоторые сайты предоставляют дополнительный API, в том числе длительный опрос. Поищите документацию на сайте или спросите у разработчиков, есть ли она.

...