Web与Haskell刮擦
Haskell网站的当前状态是什么?
我试图让自己更多地做我在哈斯克尔快速的一次性的任务,以帮助提高我的语言舒适度。
在Python中,我倾向于使用优秀的PyQuery库。 Haskell有类似的简单和容易吗? 我已经研究了Tag Soup,虽然parsing器本身看起来不错,但是实际上遍历页面并不像其他语言那样好。
那里有更好的select吗?
从我在Haskell邮件列表上search,看来TagSoup是parsing页面的主要select。 例如: http : //www.haskell.org/pipermail/haskell-cafe/2008-August/045721.html
至于网页抓取的其他方面(如抓取,抓取和caching),我search了http://hackage.haskell.org/package/的关键字,但没有发现任何有希望的。; 我甚至通过提及“http”的软件包来浏览,但是没有任何东西跳出来。
注意:我不是经常性的哈斯克勒,所以我希望如果我错过了某些东西,别人可以join。
http://hackage.haskell.org/package/shpider
Shpider是Haskell的一个web自动化库。 它允许您快速编写爬网程序,对于简单的情况(如下面的链接),即使不读取页面源代码。
它具有很多有用的function,例如将页面中的相关链接转换为绝对链接,只对给定域授权事务的选项以及仅下载html文档的选项。
它还提供了一个很好的语法来填写表单。
一个例子:
runShpider $ do download "http://apage.com" theForm : _ <- getFormsByAction "http://anotherpage.com" sendForm $ fillOutForm theForm $ pairs $ do "occupation" =: "unemployed Haskell programmer" "location" =: "mother's house"
虽然我现在还是Haskell的初学者,但我强烈的意见认为,2012年的HTMLparsing必须使用CSSselect器来完成,而且到目前为止推荐的库似乎并不使用这个原则。
一种可能性是build立在HXT之上的帅帅:
http://egonschiele.github.com/HandsomeSoup/
http://codingtales.com/2012/04/25/scraping-html-with-handsomesoup-in-haskell
这个关于HXT的页面,在这个页面上,HandsomeSoup依赖它,也会有帮助(你将需要getText或深层的getText):
http://adit.io/posts/2012-04-14-working_with_HTML_in_haskell.html
但另一种select是domselect器:
http://hackage.haskell.org/package/dom-selector
现在是alpha,它的长期维护可能是一个问题。 domselect器的优点是我不能让unicode字符与HandsomeSoup一起工作。 他们用domselect器开箱即用。
这个问题与此有关: 在Haskell的HXT上可以使用Text或ByteString吗?
domselect器基于html-conduit和xml-conduit,对此进行维护。
编辑:注意我关于基于镜头parsing的新的答案。 我留下了这个答案,因为它本身还是很好的,但是我个人宁愿用另一种方法。
我已经为这个问题写了另一个答案,build议使用基于CSSselect器的parsing,但是现在这个答案已经有一年半了,现在我认为透镜可能是一个更好的方法。 实际上,你会得到types安全的编译select器。
以这个方式来看这个reddit讨论的几个选项。 如果链接消失,我复制直接链接:
- TAGGY镜头
- hexpat镜头
- xml镜头 ,这显然可以用于html-conduit
我还没有使用这些,但是如果我今天会编写parsingHTML的新代码,我肯定会采用基于镜头的方法。