2010-04-13 2 views
4

Я и друг недавно реализовали ссылку, захватывающую мой бот IRC Clojure. Когда он видит ссылку, она slurp с страницей и захватывает заголовок со страницы. Проблема состоит в том, что для того, чтобы захватить ссылку, нужно выполнить следующую страницу: ENERGY.Как легко читать веб-страницу в Clojure

Как один идет о не чтении страницы лениво до первого </title>?

ответ

6

Использование line-seq, но не забудьте закрыть основной поток, когда сделано.

+0

Я забыл о линии-seq. Благодарю. :) – Rayne

6

Я не буду рассчитывать на то, что HTML обязательно будет разделен на строки разумным образом; не глядя за пределы нашего собственного заднего двора, например. Compojure (или Hiccup в настоящее время, я думаю) не беспокоит вставку разрывов строк, я считаю (обновление: только что проверено Hiccup - никаких разрывов строк).

Что я предлагаю вместо этого - ленивый разбор XML (с clojure.contrib.lazy-xml) поверх java.io.BufferedInputStream.

+3

BTW, я вряд ли эксперт в этой области, но я не верю, что вы можете запросить нечто меньшее, чем полный источник страницы по HTTP; на самом деле это не проблема, поскольку в любом случае вы не будете получать такие большие вещи, как изображения. 'slurp *' получит вам 'java.io.BufferedReader' в источнике, а' cclazy-xml' будет делать одно, что может быть важно для производительности, а это * не * для анализа чего-либо за пределами '. .. 'бит, который вы ищете. (Hm, я должен включить это в ответ правильно ... Может быть, я в следующий раз, теперь должен сделать перерыв.) –

+0

Существует заголовок Range, но не все серверы поддерживают его. –

+0

То, как я это делаю, это не имеет большого значения. Line-seq делает то, что мне нужно. – Rayne

 Смежные вопросы

  • Нет связанных вопросов^_^