我们正在设计一个大规模的网络抓取/解析项目.基本上,脚本需要浏览网页列表,提取特定标记的内容,并将其存储在数据库中.你会建议用什么语言大规模(数千万页?)..
我们正在将MongoDB用于数据库,因此任何具有可靠MongoDB驱动程序的东西都是优先考虑的.
到目前为止,我们一直在使用(不要笑)PHP,curl和Simple HTML DOM Parser,但我不认为它可以扩展到数百万个页面,特别是因为PHP没有适当的多线程.
我们需要一些易于开发的东西,可以在Linux服务器上运行,具有强大的HTML/DOM解析器以轻松提取该标签,并且可以在合理的时间内轻松下载数百万个网页.我们并不是真的在寻找网络抓取工具,因为我们不需要关注链接并索引所有内容,我们只需要从列表中的每个页面中提取一个标记.
如果你真的在谈论大的规模,那么你可能想要的东西,可以让你进行水平扩展,例如,像地图,减少框架的Hadoop.您可以使用多种语言编写Hadoop作业,因此您不必使用Java.例如,这是一篇关于用Python编写Hadoop作业的文章.顺便说一句,这可能是我使用的语言,这要归功于像httplib2
发出请求和lxml
解析结果这样的库.
如果Map-Reduce框架过度,你可以将它保存在Python中并使用multiprocessing
.
更新:如果您不想使用MapReduce框架,并且您更喜欢其他语言,请查看ThreadPoolExecutor
Java中的内容.不过,我肯定会使用Apache Commons HTTP客户端的东西.JDK本身的东西对程序员友好程度较低.