Java网络爬虫初体验
Posted IT-source
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java网络爬虫初体验相关的知识,希望对你有一定的参考价值。
一.什么是爬虫
引用百度百科的介绍:“网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或着蠕虫”
以上介绍关键信息:自动的抓取信息的程序或脚本。所以通俗的说网络爬虫就是能够在指定网络获取指定类型信息的程序或脚本。
二.爬虫能做什么
1.搜索引擎:搜索引擎展示的大部分内容都是由爬虫收集的各大网络内容
2.比价网站:现在电商十分发达,但是同一个商品在不同的电商平台的售价其实是有差异,所有催生了很多比价网站,比如:折多多,返利网等等。这些网站实际上就是使用爬虫在实时的监控各电商平台的价格浮动。
3.其他各种数据统计分析,例如房价与地段关系分析,每天的热点新闻类型分析等等
三.什么语言能写爬虫
通过以上分析,我们可以发现爬虫的作用非常大,不管是作为商业价值来看还是作为个人用途都会非常大的学习价值。
那么哪种编程语言适合编写爬虫呢,我们逐一分析。
php:语言简单,功能模块齐全,但是并发能力较弱
Python:各种爬虫框架,多线程支持良好,GAE的支持
JAVA:相对脚本语言比较麻烦,但是针对复杂的爬虫系统有优势。
C++:各种成本都比较高
通过以上分析可以看到,综合来看Python应该最适合写爬虫的语言,而java则是最适合复杂爬虫系统的语言。那么这篇文章将带领大家使用java语言感受一些爬虫的魅力。
四:必备知识点:URL
1.什么是URL
爬虫爬取内容其实都是到网页中爬取,这个过程我们称之为抓取网页,而爬虫抓取网页其实
和我们平时使用IE浏览器浏览网页的道理是一样的。比如,在任何一个浏览器地址栏输入:http://www.itsource.cn
打开网页的过程其实就是浏览器作为客户端向服务器发送请求,服务器接收到请求后又响应相应的内容给浏览器,我们看到内容就是浏览器在接收到服务器的响应内容后解析之后的效果。甚至我们都可以直接查看服务器相应过来的源代码,以chrome为例,直接在网页上鼠标右键:显示网页源代码(如下图)
将看到以下内容:
在上面的案例中,我们在浏览器地址栏输入的:http://www.itsource.cn 这个字符串就是URL.
定义为:统一资源定位符
我在通过浏览器的看到所有内容都是存放在服务器中的资源(比如:图片、文字、视频片段…),而如何指定要访问的具体资源,便是使用URL来指定,这也是URL存在的意义,以及为什么叫统一资源定位符,“资源”、“定位”两个词很关键
2.URL的语法格式:
URL由3部分组成:
1.协议(http),也有其他的协议,比如:https、ftp等
2.存放改资源的主机IP地址(www.itsource.cn为域名,会被DNS服务器解析为该域名绑定的IP地址)。可以理解为找到具体的服务器,但一个服务器可能会有很多的资源
3.主机资源的具体地址。可以理解为指定服务器中众多资源中某一个
协议与IP地址使用://隔开,IP地址与具体资源使用/隔开
比如:http://www.itsource.cn/openClassWeb.htm,意为访问源码时代的服务器中的公开课网页
五.抓取指定的URL网页内容
上一节讲到,通过在浏览器地址输入URL其实就是抓取了一个具体的资源(网页也是资源的一种),但是如果写爬虫程序还需要使用浏览器依次访问的话,未免也太麻烦并且没有意义。
而JAVA语言作为为网络而生的语言为爬虫程序提供了相应的API:
java.net.URL类 抽象浏览器地址栏的字符串对象
创建对象: URL url = new URL(path); 例如:URL url = new URL(“http://www.itsource.cn”);
调用方法:InputStream stream = pageURL.openStream();//获取URL对应具体资源的网络流
通过以上方法可以获取具体资源的网络流,进而可以像操作本地资源一样操作网络资源,但是在实际项目中仅仅使用URL是不够的,还需要Apache提供的HTTP客户端开源项目—
HttpClient,只需要导入HttpClient.jar包就可以直接使用,以下为示范:
可以看到返回的http状态码为200,表示请求成功。这样就成功的使用HttpClient API代替浏览器向服务器成功发起了get请求。
今天就讲解到这儿,我们已经可以成功的请求指定服务器了,至于下一步如何从响应内容中抓取我们想要的内容,下一章再讲解-源码时代Java学习
以上是关于Java网络爬虫初体验的主要内容,如果未能解决你的问题,请参考以下文章