`
jinshunlong
  • 浏览: 5525 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

几种网页爬取的方法与实现(Java)

阅读更多
一、通过HttpClient(apache commons-httpclient)方式,获许网页内容,并解析出需要的东西。

这种方法相对比较简单,因为commons-httpclient已经做了很好的封装,简单的代码如下:

  // 构造HttpClient的实例
  HttpClient httpClient = new HttpClient();
  HttpClientParams clientParams = new HttpClientParams();
  // 隐藏自己请求相关的信息
  clientParams.setParameter("http.useragent",
    "Mozilla/4.0 (compatible; FIREFOX 9.0; IBM AIX 5)");
  clientParams.setHttpElementCharset("GBK");
  HttpState httpState = new HttpState();
  httpClient.setParams(clientParams);
  httpClient.getParams().setParameter(
    HttpClientParams.HTTP_CONTENT_CHARSET, "GBK");
  httpClient.setState(httpState);
  clientParams.setVersion(HttpVersion.HTTP_1_1);
  if (useProxy) // 使用代理
  {
   httpClient.getHostConfiguration().setProxy(proxyIp, port);
  }



这里需要注意的是记得设置http.useragent属性,默认会显示为httpclient代理,很多网站为了防止被恶意爬取,最简单的方式就是判断useragent属性。

二、第一种方式最简单,但是也最容易被网站禁止掉,因为这种方式是不会执行javascript的,这样就很容易被网站通过javascript做标识识别出来,同时获取的数据如果是通过javascript计算来的,也会比较麻烦。

那么,我们来看第二种方式,通过模拟真正的browser来获取网页内容,并执行javascript,目前大部分流行的浏览器内核都是开放的,比如webkit,下面我们以mozilla引擎为例,实现如下:

首先,我们会用到xulrunner,这是使用mozilla引擎的xul浏览器,在这里我们用来替代mozilla实现。

下载xulrunner后,解压缩到相应目录

在代码中进行配置。

static {
Mozilla.getInstance().initialize(new File("D:\\xulrunner"));
System.setProperty("org.eclipse.swt.browser.XULRunnerPath",
"D:\\xulrunner");
}


将代码中的xulrunner目录位置修改为你解压缩的位置。

我们使用SWT来实现界面,SWT的Browser控件可以使用多个浏览器引擎,设置如下:

final Browser browser = new Browser(shell,
SWT.MOZILLA); // 1
nsIWebBrowser b = (nsIWebBrowser) browser.getWebBrowser();
browser.addProgressListener(new ProgressListener() {
public void changed(ProgressEvent arg0) {
}
public void completed(ProgressEvent event) {
if (listener != null) {
String html = (String) browser
.evaluate("return document.documentElement.innerHTML;");
try {
listener.onData(index,
(String) browser.getData(),
html);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});


这里,我们通过执行一段javascript得到所有的html内容。

讲到这里,如果不是很频繁的访问,基本上已经满足需求了。但是如果访问太过频繁,一般网站都会很容易识别到,一种简单的方法就是不停的转换代理IP。代码如下:

public void setProxy(final int type,final String host,final int port){
nsIServiceManager serviceManager = Mozilla.getInstance().getServiceManager();
String contractID = "@mozilla.org/preferences-service;1";
nsIPrefService prefService = (nsIPrefService) serviceManager.getServiceByContractID(
contractID, nsIPrefService.NS_IPREFSERVICE_IID);
      // Get a branch to access to the entire preference tree
nsIPrefBranch branch = prefService.getBranch("");  //4
branch.setIntPref("network.proxy.type", type);
branch.setCharPref("network.proxy.http",host);  //5
branch.setIntPref("network.proxy.http_port",port);
}


网上有很多代理IP,大家可以去找找。
分享到:
评论

相关推荐

    java爬虫爬取百度图片

    在本场景中,我们主要探讨如何使用Java语言编写爬虫来实现这一目标。 首先,要爬取百度图片,我们需要了解其图片搜索页面的URL结构。通常,百度图片的搜索结果URL会包含关键词参数,例如:`...

    java爬取京东数据

    Java爬取京东数据是一项涉及网络爬虫技术和Java编程语言的任务,主要目的是从京东网站上抓取所需的数据。在这个过程中,我们需要了解几个关键知识点: 1. **网络爬虫基础**:网络爬虫是一种自动提取网页信息的程序...

    java爬取各大平台价格

    在这个项目中,我们使用了几个关键的Java库来实现对多个电商平台的价格爬取,包括HtmlUnit、Jsoup和HttpClient。下面将详细解释这些工具以及如何利用它们进行网络爬虫开发。 1. **HtmlUnit**: HtmlUnit是一个无头...

    java爬取博客里面的文章

    Java爬虫技术是一种用于自动化获取网页内容的编程技术,它在IT行业中有着广泛的应用,特别是在数据分析、信息收集和搜索引擎优化等领域。在这个特定的项目中,我们关注的是如何使用Java来爬取博客中的文章。WebMagic...

    java爬取携程酒店评价信息

    在Java编程领域,爬虫是一种常见的技术,用于自动地从互联网上抓取信息。本项目专注于使用Java编写爬虫来获取携程酒店的用户评价信息,这涉及到网络请求、HTML解析和数据存储等多个环节。首先,我们需要理解爬虫的...

    2.(地图数据篇)百度地图瓦片数据爬取--java代码.zip

    在本项目中,我们主要探讨的是如何利用Java代码实现对百度地图瓦片数据的爬取。这个过程涉及到网络请求、地图坐标系统转换以及图像处理等多个技术领域。首先,我们需要了解地图瓦片的基本概念。 地图瓦片是将大地图...

    java爬取网页用到的一些jar

    7. **Puppeteer**:虽然Puppeteer是JavaScript库,但它与Java的JCEF(Java Chromium Embedded Framework)结合使用,可以在Java环境中模拟Chrome浏览器,对于处理复杂的网页和JavaScript交互特别有效。 在具体使用...

    java爬虫爬取贴吧所有用户头像

    Java爬虫技术是一种用于自动化网络数据抓取的编程方法,主要应用于数据分析、信息提取和搜索引擎优化等领域。在Java中,我们可以使用多种库来实现爬虫功能,如Jsoup、HttpURLConnection、Apache HttpClient以及...

    Java爬虫进阶:高效爬取CSDN技术文章.zip

    这个项目很可能使用了其中的一种或几种,以解析HTML结构,提取CSDN网站上的文章链接、标题、作者、内容等关键信息。 CSDN作为国内知名的IT技术社区,拥有大量的技术文章和资源。爬取这些数据可以用于个人学习、数据...

    java爬虫,利用代理IP爬取大众点评网站内容.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    14.(地图数据篇)arcgis地图瓦片数据爬取--java代码.zip

    Java代码爬取ArcGIS地图瓦片涉及以下几个核心概念和技术: 1. **网络请求**:你需要发送HTTP或HTTPS请求到ArcGIS服务器获取特定瓦片。这通常使用`java.net.URL`类或第三方库如Apache HttpClient或OkHttp来实现。 2...

    基于http的Java爬虫爬取百度新闻

    综上所述,基于http的Java爬虫爬取百度新闻是一个涉及HTTP协议、Java编程、HTML解析和网页爬取技术的综合性项目。通过实践,我们可以深入理解网络爬虫的工作原理,并提升数据分析和网页解析能力。

    Java利用HtmlUtil和jsoup爬取知网中国专利数据的爬虫程序.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    JAVA 网络爬虫,已经成功爬取新浪搜狐163

    Java网络爬虫是一种用于自动化获取网页内容的程序,它能够高效地遍历互联网上的大量页面,提取所需信息。在Java中实现网络爬虫主要涉及到以下几个关键知识点: 1. **HTTP/HTTPS协议**:网络爬虫首先需要理解HTTP...

    java爬取天涯社区

    Java爬虫是编程领域中的一种技术,主要用于自动化地从互联网上获取信息,尤其适用于像天涯社区这样的大型在线论坛。在本项目"java爬取天涯社区"中,我们将探讨如何使用Java语言来编写一个简单的网络爬虫,以抓取天涯...

    java网络爬虫模拟登入抓取数据

    Java网络爬虫是一种技术,用于自动化地从互联网上抓取信息。在许多情况下,特别是涉及到登录后才能访问的内容,如人人网这样的社交平台,我们不能简单地通过HTTP请求获取数据,因为这些页面需要用户身份验证。这就...

    网页爬取图片

    标签“java”表明这个项目是用Java语言实现的,Java作为一种跨平台的编程语言,拥有丰富的库和工具支持网络编程,且具有良好的性能和稳定性,非常适合开发这种长期运行的后台服务。 总的来说,这个项目涵盖了以下几...

    Java爬取CSDN博客源码

    【Java爬取CSDN博客源码】是一个关于利用Java编程语言进行网络数据抓取的实践项目,主要涉及的技术领域是Web爬虫和大数据处理。在这个项目中,开发者编写了一个爬虫程序,虽然存在一些小问题,但基本功能已经实现,...

    java爬虫,抓取网页图片

    11. **法律与道德规范**:爬虫开发需遵守法律法规,尊重网站的robots.txt文件,不爬取禁止抓取的数据,并合理使用抓取的信息。 通过以上知识点的学习和实践,你可以构建一个基本的Java图片爬虫,实现从网页中抓取并...

    多线程java爬虫爬取小说网站

    在IT行业中,Java爬虫是一种常见的技术,用于自动抓取网页信息,特别是在处理大量数据时,采用多线程可以显著提升爬取效率。本项目是一个使用Java编写的多线程爬虫,专为爬取小说网站设计。在这个项目中,我们将深入...

Global site tag (gtag.js) - Google Analytics