Как использовать Unicode с Live для веб-скребков
Я пытаюсь очистить несколько сайтов, которые требуют поддержки Unicode. Например, я пытаюсь получить название этой книги, но она возвращает перемешанные символы:
(-> "http://www.brill.nl/publications/evliya-celebis-book-travels"
java.net.URL. enlive/html-resource
(enlive/select [:h1#page-title]) first :content)
И пытаясь наскрести арабский сайт возвращается с?????? повсюду.
(enlive/html-resource (java.net.URL. "http://www.aljazeera.net/portal"))
Я не уверен, как я должен активировать поддержку Unicode.
2 ответа
У Enlive есть поддержка юникода, потому что он использует строки Java. Я запустил ваш первый пример на своем компьютере и получил такой результат:
(Evliyā Çelebi's Book of Travels)
Возможно, используемый вами шрифт не имеет глифов для кодов точек, которые вы пытаетесь показать?
Кристофу Гранду, автору живого писателя, было достаточно, чтобы ответить в почтовой группе Enlive. Его предложение было довольно информативным. Я скопировал письмо ниже:
Привет,
Enlive не является (и не включает) полнофункциональным агентом HTTP. Когда вы передаете java.net.URL в html-ресурс, он вызывает для него.getContent, получает InputStream и затем принимает UTF-8. Однако, если вы знаете реальную кодировку, вы можете сделать:
(-> "http://www.brill.nl/publications/evliya-celebis-book-travels" java.net.URL.
.getContent (java.io.InputStreamReader. "ENCODING GOES HERE")
enlive/html-resource
(en/select [:h1#page-title]) first :content)
Или используйте библиотеку агентов, которая определит правильную кодировку и передаст полученный Reader в html-ресурс.
НТН,
Christophe