`

网络爬虫(网络蜘蛛)之网页抓取

阅读更多

   转载地址:http://www.cnblogs.com/chenying99/articles/3213533.html

 

        现在有越来越多的人热衷于做网络爬虫(网络蜘蛛),也有越来越多的地方需要网络爬虫,比如搜索引擎、资讯采集、舆情监测等等,诸如此类。网络爬虫涉及到的技术(算法/策略)广而复杂,如网页获取、网页跟踪、网页分析、网页搜索、网页评级和结构/非结构化数据抽取以及后期更细粒度的数据挖掘等方方面面,对于新手来说,不是一朝一夕便能完全掌握且熟练应用的,对于作者来说,更无法在一篇文章内就将其说清楚。因此在本篇文章中,我们仅将视线聚焦在网络爬虫的最基础技术——网页抓取方面。

说到网页抓取,往往有两个点是不得不说的,首先是网页编码的识别,另外一个是对网页脚本运行的支持,除此之外,是否支持以POST方式提交请求和支持自动的cookie管理也是很多人所关注的重要方面。其实Java世界里,已经有很多开源的组件来支持各种各样方式的网页抓取了,包括上面提到的四个重点,所以说使用Java做网页抓取还是比较容易的。下面,作者将重点介绍其中的六种方式。

 

HttpClient
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
 (1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
 (2)支持自动转向
 (3)支持 HTTPS 协议
 (4)支持代理服务器

   (5)支持自动的Cookies管理等

Java爬虫开发中应用最多的一种网页获取技术,速度和性能一流,在功能支持方面显得较为底层,不支持JS脚本执行和CSS解析、渲染等准浏览器功能,推荐用于需要快速获取网页而无需解析脚本和CSS的场景。

范例代码如下:

package cn.ysh.studio.crawler.httpclient;import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;/**
 * 基于HtmlClient抓取网页内容
 *
 * @author www.yshjava.cn
 */publicclassHttpClientTest{publicstaticvoid main(String[] args)throwsException{//目标页面String url ="http://www.yshjava.cn";//创建一个默认的HttpClientHttpClient httpclient =newDefaultHttpClient();try{//以get方式请求网页http://www.yshjava.cnHttpGet httpget =newHttpGet(url);//打印请求地址System.out.println("executing request "+ httpget.getURI());//创建响应处理器处理服务器响应内容ResponseHandlerresponseHandler=newBasicResponseHandler();//执行请求并获取结果String responseBody = httpclient.execute(httpget, responseHandler);System.out.println("----------------------------------------");System.out.println(responseBody);System.out.println("----------------------------------------");}finally{//关闭连接管理器
            httpclient.getConnectionManager().shutdown();}}}

 

Jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

网页获取和解析速度飞快,推荐使用。
 主要功能如下:
 1. 从一个URL,文件或字符串中解析HTML;
 2. 使用DOM或CSS选择器来查找、取出数据;
 3. 可操作HTML元素、属性、文本;

范例代码如下:

package cn.ysh.studio.crawler.jsoup;import java.io.IOException;import org.jsoup.Jsoup;/**
 * 基于Jsoup抓取网页内容
 * @author www.yshjava.cn
 */publicclassJsoupTest{publicstaticvoid main(String[] args)throwsIOException{//目标页面String url ="http://www.yshjava.cn";//使用Jsoup连接目标页面,并执行请求,获取服务器响应内容String html =Jsoup.connect(url).execute().body();//打印页面内容System.out.println(html);}}

 

HtmlUnit
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。采用的是Rhinojs引擎。模拟js运行。

网页获取和解析速度较快,性能较好,推荐用于需要解析网页脚本的应用场景。

范例代码如下:  

package cn.ysh.studio.crawler.htmlunit;import com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.Page;import com.gargoylesoftware.htmlunit.WebClient;/**
 * 基于HtmlUnit抓取网页内容
 *
 * @author www.yshjava.cn
 */publicclassHtmlUnitSpider{publicstaticvoid main(String[] s)throwsException{//目标网页String url ="http://www.yshjava.cn";//模拟特定浏览器FIREFOX_3WebClient spider =newWebClient(BrowserVersion.FIREFOX_3);//获取目标网页Page page = spider.getPage(url);//打印网页内容System.out.println(page.getWebResponse().getContentAsString());//关闭所有窗口
        spider.closeAllWindows();}}

 


Watij

Watij(发音wattage)是一个使用Java开发的Web应用程序测试工具,鉴于Watij的简单性和Java语言的强大能力,Watij能够使您在真正的浏览器中完成Web应用程序的自动化测试。因为是调用本地浏览器,因此支持CSS渲染和JS执行。

网页获取速度一般,IE版本过低(6/7)时可能会引发内存泄露。

范例代码如下:

package cn.ysh.studio.crawler.ie;import watij.runtime.ie.IE;/**
 * 基于Watij抓取网页内容,仅限Windows平台
 *
 * @author www.yshjava.cn
 */publicclassWatijTest{publicstaticvoid main(String[] s){//目标页面String url ="http://www.yshjava.cn";//实例化IE浏览器对象
        IE ie =new IE();try{//启动浏览器
            ie.start();//转到目标网页
            ie.goTo(url);//等待网页加载就绪
            ie.waitUntilReady();//打印页面内容System.out.println(ie.html());}catch(Exception e){
            e.printStackTrace();}finally{try{//关闭IE浏览器
                ie.close();}catch(Exception e){}}}}

 

Selenium
Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。

网页获取速度较慢,对于爬虫来说,不是一个好的选择。

范例代码如下:

package cn.ysh.studio.crawler.selenium;import org.openqa.selenium.htmlunit.HtmlUnitDriver;/**
 * 基于HtmlDriver抓取网页内容
 *
 * @author www.yshjava.cn
 */publicclassHtmlDriverTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";HtmlUnitDriver driver =newHtmlUnitDriver();try{//禁用JS脚本功能
            driver.setJavascriptEnabled(false);//打开目标网页
            driver.get(url);//获取当前网页源码String html = driver.getPageSource();//打印网页源码System.out.println(html);}catch(Exception e){//打印堆栈信息
            e.printStackTrace();}finally{try{//关闭并退出
                driver.close();
                driver.quit();}catch(Exception e){}}}}

 

Webspec 

一个开源的带有界面的Java浏览器,支持脚本执行和CSS渲染。速度一般。
 范例代码如下:

package cn.ysh.studio.crawler.webspec;import org.watij.webspec.dsl.WebSpec;/**
 * 基于WebSpec抓取网页内容
 *
 * @author www.yshjava.cn
 */publicclassWebspecTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";//实例化浏览器对象WebSpec spec =newWebSpec().mozilla();//隐藏浏览器窗体
        spec.hide();//打开目标页面
        spec.open(url);//打印网页源码System.out.println(spec.source());//关闭所有窗口
        spec.closeAll();}}

 

分享到:
评论

相关推荐

    网络蜘蛛及网络爬虫详解

    网络蜘蛛是一种自动化的程序或软件,用于遍历互联网上的网页并抓取所需的数据。它们广泛应用于搜索引擎、数据分析、市场研究等领域,能够快速而高效地收集大量信息。 #### 二、网络蜘蛛的工作原理 网络蜘蛛通常...

    Java网络爬虫(蜘蛛)源码

    Java网络爬虫(蜘蛛)源码是一种用Java语言编写的程序,它可以模拟人类在互联网上的浏览并抓取信息。这种程序可以在互联网上自动地搜索和提取数据,并将其保存在本地计算机上,以供后续处理和分析。通过使用Java网络...

    网页内容自动抓取工具-我的网络爬虫

    网页内容自动抓取工具,通常被称为网络爬虫或网页蜘蛛,是用于自动化地从互联网上收集信息的一种程序。网络爬虫对于数据挖掘、市场研究、搜索引擎优化等许多领域都有着广泛的应用。在这里,我们讨论的是一个名为"我...

    蜘蛛抓取网页数据

    在标题提到的“蜘蛛抓取网页数据”中,我们主要关注的是使用编程语言,如C#,实现这一过程。.NET框架提供了一个强大的环境来构建这样的应用程序,而C#作为.NET平台的主要开发语言,拥有丰富的库和工具支持网页抓取。...

    网页爬虫工具抓取网页pclawer

    网页爬虫,也被称为网络蜘蛛或网络机器人,是一种自动遍历和抓取网页的程序。它们遵循超链接结构,从一个网页跳转到另一个网页,收集网页上的信息。爬虫的主要任务包括获取HTML源代码、解析页面内容、提取有用信息,...

    Delphi模拟搜索引擎蜘蛛抓取网页内容.rar

    这个"Delphi模拟搜索引擎蜘蛛抓取网页内容.rar"文件提供了一个使用Delphi编程语言实现的简单示例,帮助我们理解搜索引擎蜘蛛的工作原理。Delphi是一款流行的面向对象的编程环境,尤其适合开发桌面应用程序。 首先,...

    用于nodejs的网络爬虫抓取器蜘蛛_JavaScript_HTML_下载.zip

    "用于nodejs的网络爬虫抓取器蜘蛛_JavaScript_HTML_下载.zip"这个压缩包可能包含了一个使用JavaScript编写的网络爬虫项目,其目标是抓取HTML网页内容。在这个项目中,我们将会探讨Node.js中的网络爬虫基础、主要库的...

    PHP模拟baidu蜘蛛抓取网站链接

    总的来说,PHP模拟百度蜘蛛抓取网站链接涉及了以下知识点: 1. PHP基础语法与网络请求:包括cURL或file_get_contents的使用。 2. HTTP协议:GET请求和User-Agent头的理解。 3. HTML解析:DOMDocument和DOMXPath的...

    网络爬虫(机器人蜘蛛)完整源代码(C#)

    网络爬虫,也被称为机器人或蜘蛛,是一种自动化程序,用于在网络上遍历网页并抓取信息。在IT领域,网络爬虫被广泛应用于数据挖掘、搜索引擎优化、市场分析等多个场景。本资源提供了一个使用C#语言编写的网络爬虫的...

    解析Python网络爬虫_复习大纲.docx

    本文档是关于Python网络爬虫的复习大纲,涵盖了爬虫的基本概念、实现原理、技术、网页请求原理、抓取网页数据、数据解析、并发下载、抓取动态内容、图像识别与文字处理、存储爬虫数据、爬虫框架Scrapy等知识点。...

    网络爬虫作业练习_爬虫_python学习_网络爬虫_python_

    网络爬虫,又称网页抓取或网络蜘蛛,是一种自动遍历互联网并抓取网页信息的程序。它通过遵循网页间的超链接关系,系统性地获取大量网页内容,为搜索引擎提供索引,或者为数据分析师提供原始数据。 Python是网络爬虫...

    追虹网络蜘蛛 抓取网页

    【追虹网络蜘蛛 抓取网页】 网络爬虫,又称为网络蜘蛛,是互联网上的一个自动化程序,用于遍历和索引网页,收集信息。在IT领域,它们扮演着至关重要的角色,特别是在搜索引擎的构建中。追虹网络蜘蛛是这类工具的一...

    刨丁解羊中文分词器-主要用于对网络蜘蛛或网络爬虫抓取的网页进行分词

    刨丁解羊中文分词器,主要用于对网络蜘蛛或网络爬虫抓取的网页进行分词,支持繁体中文分词、简体中文分词、英文分词,是制作通用搜索引擎和垂直搜索引擎的核心组件。该软件在普通PC机器上测试显示:TXT格式正文分词...

    商剑分布式网络蜘蛛(网络爬虫-spider)

    商剑分布式网络蜘蛛,性能高速运转,能耗尽全部带宽,可批量采集海量数据的网页,若几百台服务器安装商剑...更是搜索引擎-网络蜘蛛-网络爬虫-spider-网页抓取等技术的必备工具之一。http://www.100spider.cn/wspider.rar

    网络爬虫 蜘蛛 相关论文

    网络爬虫,也被称为蜘蛛或Web爬虫,是信息技术领域中的一个重要组成部分,主要负责自动地遍历互联网上的网页,抓取所需数据,为搜索引擎、数据分析等应用提供基础。本压缩包包含的论文集专注于网络爬虫的技术研究和...

    网络抓取蜘蛛源程序

    网络抓取,也被称为网页爬虫或网络蜘蛛,是一种自动浏览互联网并收集信息的技术。在IT领域,网络抓取有着广泛的应用,例如数据分析、搜索引擎优化、市场研究等。本项目提供的"网络抓取蜘蛛源程序"是使用C#语言开发的...

    java项目源码之网络爬虫(蜘蛛)的实现.rar

    这个Java项目是一个网络爬虫,也称为网络蜘蛛,旨在自动地从互联网上抓取网页内容并进行处理。该网络爬虫具有以下主要功能: 网页抓取:通过指定的起始URL,网络爬虫会递归地抓取网页内容,包括HTML、CSS、...

    蜘蛛日志在线分析工具源码 快速分析搜索引擎网络爬虫抓取记录

    蜘蛛日志在线分析工具是一款开源的工具,可用于快速分析网站访问日志中搜索引擎网络爬虫的抓取记录。如果你的服务器运行在linux宝塔面板环境下,你只需要登录宝塔面板的linux控制面板,在左侧导航栏中点击”文件”,...

    Python入门网络爬虫之精华版

    本篇文章《Python入门网络爬虫之精华版》主要介绍了Python网络爬虫的基础知识,从抓取、分析到存储的三个主要方面,以及如何应对一些常见的反爬虫机制。此外,还提及了Scrapy这一流行的爬虫框架,并提供了一个参考...

Global site tag (gtag.js) - Google Analytics