一、文章来由
本来最近任务挺多,但是今天想放松一下,正巧Bill喜欢玩英语配音,而配音都是在配音软件的云上,我想把那些都拿到,于是就写一了一个爬虫,接着就有了这篇爬虫教程~~
二、爬虫!!爬虫!!
首先要搞清什么叫爬虫~~
络爬虫(又被称为 页蜘蛛, 络机器人,在FOAF 区中间,更经常的称为 页追逐者),是一种按照一定的规则,自动地抓取万维 信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
当然Java本身应该不算是脚本语言(一个脚本通常是解释运行而非编译,Java是不是解释型语言现在还存在争议),但是做这么高级的事情,确实有点像脚本。
那为什么叫简易爬虫呢,因为是直接用 BufferedReader 读 URL 中的 HTML ,然后用正则表达式去匹配是不是我要的 页。这种简易爬虫,只能用在页面没有特殊限制或者反爬虫机制的地方,如果页面有登陆验证或者是异步等反爬虫,通过这个URL 是不可能一次拿到真实地址的(一般会错误被导到另外一个页面)
通常,爬虫需要一个种子页面,是一个源 URL 地址,通过这个一层层爬下去
Bill 以前用过 httpclient 的 jar 包做过稍微复杂一点的爬虫,这个 jar 包可以把 HTML 用自己的数据结构存起来,形成一棵树结构(HTML 本身就是一种树结构的标记语言),然后提供各种过滤方法,可以找到你要的特定信息。
当然还有各种爬虫框架、模拟用户输入的包,可以完成更高难度的操作,绕过诸如淘宝这类有反爬虫技术的 站,这个大家有兴趣再去研究。
三、虫子制作过程
我提供了源码下载(当然是免金币的~~),所以,在文章中就不复制所有源代码了,只把关键代码、主要思想和关键函数讲一讲。
爬下静态 页的代码,可以很明显看到,只是直接用 BufferedReader 获取 URL 中的 HTML,而这些基本的函数和类,在Java标准类库中都有,不用额外导包。
爬虫的种子地址当然是 bill 希望去爬的趣配音web页面地址,我希望得到这些web页面里面,是我配音的、真实MP4地址~~
代码中我是用 url = “http://video.qupeiyin.cn/index.php=home&c=show&a=share&id=4102907“; 开始爬的~~
而且爬虫通常必须用多线程,不用多线程,想想有400w+个页面,一分钟按500个页面算,都要(4000000/500/60)=133个小时,hold不住的~~
下面的代码是,通配符匹配的代码:
关于多线程共享,这里要粘贴一段test的代码:
这是一个可能的结果:

我在代码中把,爬到的有用地址写到了txt里面。具体追加过程见附录。
关于多线程,Java提供了不止一种方法,可能你会说,其实继承 Thread 类,跟实现 Runnable 接口差不多,因为 其实Thread中的run方法调用的是Runnable接口的run方法而已。但是他们还是有相当多的不一样,详情可以参考这篇文章,写的不错,但是!!
这篇文章里面也有不少错误,具体需要我们自己仔细分辨!!毕竟自己搞懂的才是真正自己的,如果要看,可以结合评论一起看~~
也差不多就这样了,主要还是读源码,理解,做实验~~
四、小结
要对写出爬虫有信心,其实没那么难~~~好了,2小时就耍完了这个,Bill可以安心去写项目了~bye
源代码下载地址(2.0版):http://download.csdn.net/detail/scythe666/8973453
之前有另一版,因为是用线程共享写的,出现了线程冲突,输出了很多个一模一样的地址,所以有了上面的第二版改版 http://download.csdn.net/detail/scythe666/8973067
五、附:
Java追加文件内容的三种方法
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!