如何使用unicode和enlive进行网页抓取

时间:2012-05-17 17:46:31

标签: clojure enlive

我正在尝试抓一些需要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 个答案:

答案 0 :(得分:2)

Enlive确实有unicode支持,因为它使用Java字符串。我在计算机上运行了你的第一个例子并得到了这个结果:

(Evliyā Çelebi's Book of Travels)

您使用的字体可能没有您要显示的点代码的字形?

答案 1 :(得分:2)

作为活着的作者,克里斯托夫•格兰德(Christophe Grand)对reply on the Enlive email group来说足够了。他的建议非常有用。我复制了以下电子邮件:

  

您好,

     

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-resource。

     

HTH,

     

克里斯托弗