ric*_*ree 51 haskell html-parsing web-scraping
使用Haskell抓取网站的库的当前状态是什么?
我正努力让自己在Haskell中完成更多快速的一次性任务,以帮助提高我对语言的舒适度.
在Python中,我倾向于使用优秀的PyQuery库.在Haskell中有类似简单易用的东西吗?我看过Tag Soup,虽然解析器本身看起来不错,但实际遍历页面并不像其他语言那样好看.
那里有更好的选择吗?
scl*_*clv 36
http://hackage.haskell.org/package/shpider
Shpider是Haskell的Web自动化库.它允许您快速编写爬虫,以及简单的情况(如下面的链接),即使不读取页面源.
它具有有用的功能,例如将相对链接从页面转换为绝对链接,仅在给定域上授权事务的选项,以及仅下载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"
Run Code Online (Sandbox Code Playgroud)
(在2018年编辑 - shpider已弃用,这些天https://hackage.haskell.org/package/scalpel可能是一个很好的替代品)
Dav*_* J. 22
从我在Haskell邮件列表中的搜索看来,TagSoup似乎是解析页面的主要选择.例如:http: //www.haskell.org/pipermail/haskell-cafe/2008-August/045721.html
至于网页抓取的其他方面(例如抓取,抓取和缓存),我在http://hackage.haskell.org/package/搜索了这些关键字,但没有找到任何有希望的东西.我甚至浏览了提到"http"的软件包,但没有任何东西跳出来.
注意:我不是常规的Haskeller,所以我希望其他人可以在我错过的时候插话.
Emm*_*ery 11
虽然我现在仍然是Haskell的初学者,但我强烈认为2012年的HTML解析必须使用CSS选择器完成,而且到目前为止推荐的库似乎不使用该原理.
一种可能性是HandsomeSoup,它建立在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
但另一个选择是选择器:
http://hackage.haskell.org/package/dom-selector
它现在是alpha,它的长期维护可能是一个问题.dom-selector的优点是我无法使用unicode字符来使用HandsomeSoup.他们开箱即用的dom-selector.
这个问题与此有关: 是否可以在Haskell中的HXT上使用Text或ByteString?
dom-selector基于html-conduit和xml-conduit,可以确保维护.
编辑:请注意我关于基于镜头的解析的新答案.我留下了这个答案,因为它本身仍然很好,但现在我个人宁愿使用另一种方法.