最近在写一个网络爬虫的Java程序,想从多个网页上拿数据,然后写到一个文件里?
因为数据量挺多的,所以想考虑优化的问题。
所以问下常见的优化思路是怎么样的?(应该有多个思路吧,比如说用到线程什么的)
最近在写一个网络爬虫的Java程序,想从多个网页上拿数据,然后写到一个文件里?
因为数据量挺多的,所以想考虑优化的问题。
所以问下常见的优化思路是怎么样的?(应该有多个思路吧,比如说用到线程什么的)
一般爬行可以根据运行的环境是单机或者是分布式设定工作的线程数,同时需要一个爬行过页面的索引,因为是多线程,爬过的就需要跳过。
还有就是索引可以将爬下来的内容进行多个文件存储,因为单个文件存储不但查询会很慢(多文件可以先遍历文件名再遍历内容,单个文件需要遍历全部内容)。
优化的方向有几个:
1、解析的算法,网页爬下来后需要抽出里面的内容,去掉不用的标签
2、索引和存储的算法,索引考虑用url进行索引,至于多少内容怎么存储可以参考开源
3、参与计算的设备数量,单机的话建议cpu核数差不多的线程就好了,多的有没太多提高。还可以用Hadoop的集群运行的自己的java程序。就是弄好多计算机联合计算,连线程都不用设置了
暂时想到这么多
有成熟的框架,比如nutch这个java的,里面包含了爬行的算法,线程,页面的内容解析存储。可以参考下,比自己闷头写要好。