libwww,libcurl以及其他
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://blog.devep.net/virushuo/2007/03/11/libwww-or-libcurl.html
最近我需要写点页面分析的东西,这些东西某些程度上类似搜索引擎的“爬虫->parser->存储”的过程。
过去我常用的抓取页面的库是libcurl,这个东西是unix常用命令curl的基础,curl被称做“命令行浏览器”,功能强大,支持的协议也全面。遗憾的是libcurl仅仅是个支持多协议的抓取库,不能做解析。
找来找去,发现了w3c的Libwww库,这东西功能强大的吓人,不仅有解析,还有robot(也就是爬虫了,或是叫internet walker)功能。在Libwww基础上完成的程序很多,最著名的大概是字符模式的浏览器lynx。我几乎就觉得这就我需要的东西了,立刻dive into。
一整天之后,我终于能用这东西抓下来页面,并且从html页面中分析出来一些信息了,但是想更进一步就变的异常困难。因为这个库功能太复杂了。这东西文档不详细,被人提及的也少。Libwww最近的Release 5.3.2,发布于2000年12月20日。一个有这么多年历史的东西,竟然没多少开发者在讨论,非常不正常。
找来找去,最后在libcurl的FAQ里面看到了和Libwww的比较,精选的读者来信告诉我,不仅仅是我一个人被Libwww的复杂弄的晕了头脑,我才花了一整天,写信的那个哥们竟然用了一人月,还是在里面打转,直到换了curl才好。虽然这是libcurl推销自己的方法,不过这些失败的前辈的经验让我对自己的智商重新有了信心。看来这东西没多少人讨论是正常的...
好吧,我也投降,libcurl没html解析功能,这没关系,我找别的办法好了...这么复杂的库,再好我也实在没办法忍受下去了,再说我需要的功能其实也真没Libwww那么复杂的。
写程序其实很容易迷失,你会看到一个似乎很完美,什么都能做的东西,一下子就喜欢上它,但是最后往往还是无福消受。往往是那些,不那么成熟,多少有点小毛病的库,组合在一起才是真正的解决方案。




Comments
啊,走错了……
Posted by: magoi-> | March 12, 2007 10:07 AM
curl用起来够快速,而且支持也不错。算是html解析标配了。
Posted by: ak47 | March 12, 2007 12:33 PM
如果可以选择Perl的话,可以使用HTML解析相关的模块,我就使用过HTML::TableExtract提取网页上的表格。最基本的模块是HTML::Parser,当然最好用一些高层的,WWW::Mechanize也很不错的。
Perl的模块可以在http://search.cpan.org/上找到。
Posted by: netcasper | March 12, 2007 2:02 PM
我的选择基本是:C>python>java。虽然这个blog是perl...但是我实在还是不想用perl写其他的东西了。哈哈。
Posted by: virushuo | March 12, 2007 4:17 PM
libcurl 这一套东西有点象瑞士军刀
居家旅行用挺好 :)
Posted by: Fenng | March 12, 2007 10:06 PM
用curl抓取,然后用tidy解析。
拜托能不能弄个稍微远景一些的照片,感觉视线被紧盯着难受
Posted by: Adex | March 14, 2007 7:23 PM
Python+BeautifulSoup,超赞!
Posted by: zhengyun | March 15, 2007 3:35 AM
越来越技术了。。。:)
Posted by: 土豆 | March 26, 2007 11:46 PM
脚本语言做这个正好是内行。ruby或python都是好选择。
佩服你用c来做。用java来做的人也是很有勇气的。*_~
Posted by: lifr | September 7, 2007 5:03 PM