`
zscomehuyue
  • 浏览: 412151 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过java抓取任何指定网页的数据---该技术可实现网站静态化

阅读更多
通过java抓取任何指定网页的数据---该技术可实现网站静态化
发布: 2009-12-18 09:28 | 作者: sytkang | 来源: 迈胜 IT人才培训机构

假设你需要获取51job人才网上java人才的需求数量,首先你需要分析51job网站的搜索这一块是怎么运作的,通过解析网页的源代码,我们发现了以下一些信息:
1. 搜索时页面请求的URL是 http://search.51job.com/jobsearch/search_result.php
2. 请求所用的方法为:POST
3. 返回的页面的编码格式为:GBK
4. 假设我们想获取搜索java人才时结果页面中显示的需求数量,我们发现数量位于返回的HTML数据中这样的一段代码之中:<td>1-30 / 14794</td>,于是我们可以得到这样的一个模式:".+1-\d+ / (\d+).+",第一个分组的内容就是我们需要的最终数据,有关java中的模式,请参考java文档中Pattern类的介绍
5. 另外做为POST请求,页面向服务器发送的数据如下(这个很容易能过prototype这样的js框架抓取到,参考我的其它博客介绍):lang=c& amp; amp;stype=1&postchannel=0000&fromType=1&line=&keywordtype=2&keyword=java&btnJobarea=%E9%80%89%E6%8B%A9%E5%9C%B0%E5%8C%BA&jobarea=0000&image=&btnFuntype=%E9%80%89%E6%8B%A9%2F%E4%BF%AE%E6%94%B9&funtype=0000&btnIndustrytype=%E9%80%89%E6%8B%A9%2F%E4%BF%AE%E6%94%B9&industrytype=00
对于第5条中的数据哪些是服务器真正需要的我们不管,全部发送过去就是了。有了这些准备,我们就可以真正开始通过java发送请求,并获得最终数据了。

我们定义Resource类,这个类封装所有的与请求有关的信息,Resource包括以下属性:
CODE:

/** *//**
  * 需要获取资源的目标地址,不包含查询串
  */
private String target;
  /** *//**
  * get请求时的查询串,或post请求的请求数据
  */
private String queryData = "";

/** *//**
  * 请求方式,get / post
  */
private String method = "GET";

/** *//**
  * 返回的数据的编码类型
  */
private String charset = "GBK";

/** *//**
  * 抓取数据的模式,将根据模式的分组来返回数据列表
  */
private String pattern;
以下为抓取内容的代码:
CODE:

//假设以下代码中res对象封装了所有的请求信息。
//URL指向目的地。
//res.getTarget返回目标地址,且当为get请求时,这个地址包含了查询串的信息
URL url = new URL(res.getTarget());
HttpURLConnection con = (HttpURLConnection) url.openConnection(); //建立到目的地的联接
con.setRequestMethod(res.getMethod()); //设置请求的方法
//设置HTTP请求头信息
con.setRequestProperty("accept", "*/*"); 
con.setRequestProperty("connection", "Keep-Alive");
con.setRequestProperty("user-agent",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
con.setDoInput(true);
if (res.getMethod().equals("POST")) { //如果为Post请求则发送请求数据
  con.setDoOutput(true);
  con.getOutputStream().write(res.getQueryData().getBytes());
  con.getOutputStream().flush();
}   
//通过BufferedReader一行行的读取数据,如果你需要的是全部返回结果,可以修改一下这里
BufferedReader br = new BufferedReader(new InputStreamReader(
con.getInputStream(), res.getCharset()));
Pattern pattern = Pattern.compile(res.getPattern());
String s = null;
while ((s = br.readLine()) != null) {
   System.out.println(s);
   Matcher m = pattern.matcher(s); //检测当前行是否与要求结果的模式相匹配
   boolean b = m.matches();
   if (! b) {
      continue;
   }
   int size = m.groupCount();
   List result = new ArrayList(size);
   for(int i=0; i<size; i++){
     result.add(m.group(i+1)); //如果有多个分组,则取出所有分组,并把最终结果做为列表返回
   }    
   return result;
}
如果不需要通过提交表单数据给服务器就能抓取到最终结果,显然上面的操作就有点小题大作了,删除上面的部分代码就可以了。
分享到:
评论

相关推荐

    有关Java页面静态化

    - **Redis/Cache**:缓存技术可以辅助实现静态化,将动态内容缓存为HTML,减少数据库查询。 在进行页面静态化时,需要注意以下问题: 1. **SEO优化**:静态HTML有利于搜索引擎爬虫抓取,提高搜索排名。 2. **版本...

    网页动态抓取

    网页动态抓取是一种技术,主要用于从互联网上获取实时更新或交互式内容,这些内容在静态抓取时可能无法获取到。这项技术对于数据分析、搜索引擎优化(SEO)、内容监控以及网络研究等多个领域都至关重要。 首先,...

    java使用phantomjs把echarts转图片 静态资源

    总的来说,Java通过PhantomJS将ECharts图表转换为图片的过程涉及了前端数据可视化、后端处理和无头浏览器技术的结合。理解这些知识点对于开发复杂的数据可视化应用是非常有益的。在实际操作中,可能需要根据具体环境...

    html.rar_html页面_java 静态模板_java 静态页面_java生成html_静态页面

    本主题聚焦于“Java生成HTML静态页面”,这涉及到Java技术如何与HTML模板结合,以实现高效、可维护的网站构建。静态页面指的是不依赖服务器端动态处理的网页,它们在用户请求时直接发送到浏览器,内容不会因不同用户...

    test_static_html:java生成静态HTML

    - 对于更复杂的需求,例如博客或文档站点,Java社区还开发了一些静态站点生成器,如Jekyll(虽然主要是Ruby实现,但有Java版本)、JekyIIr和Pebble。这些工具接受Markdown或其他格式的输入,转换为静态HTML页面。 ...

    java生存静态页面

    8. **SEO优化**:对于希望被搜索引擎抓取的网站,静态页面更有利于SEO(搜索引擎优化)。可以使用Server-Side Rendering (SSR) 或预渲染技术,将Java生成的动态内容转化为静态HTML,方便搜索引擎爬虫读取。 总结...

    java爬取网页表格的例子(运行环境myeclipse)

    本示例专注于使用Java语言来抓取网页中的表格数据,而开发环境则是MyEclipse。MyEclipse是流行的Java集成开发环境(IDE)之一,它提供了丰富的功能支持,包括对Java Web项目的良好支持。 首先,要实现这个任务,...

    urlwrite实现页面的静态化

    在网页开发中,静态化是一种优化网站性能的重要技术,它将动态生成的页面转换为静态HTML文件,从而提高页面加载速度,减轻服务器负担,并改善搜索引擎优化(SEO)。本篇文章主要探讨的是如何使用`urlwrite`函数来...

    新闻_静态化 加速访问效率

    4. **静态化技术** - **内容管理系统(CMS)**:如WordPress、Drupal等支持自动静态化,发布文章时可生成静态页面。 - **网页渲染服务**:如Prerender.io,用于预渲染JavaScript驱动的单页应用(SPA),生成可供...

    detail静态化

    通过Detail系统的静态化改造,淘宝技术团队成功地解决了原有架构下的性能瓶颈问题,提高了系统的稳定性和响应速度,有效应对了突发流量冲击,为用户提供更流畅的购物体验。这一系列改造不仅展示了淘宝技术实力的强大...

    Java爬虫汽车之家图片

    Java爬虫是一种使用Java编程语言实现的网络爬虫技术,它主要用于自动抓取互联网上的信息,如网页内容、图片等。在本案例中,项目组利用Java爬虫从汽车之家网站获取了12万张汽车图片,用于训练人工智能的图片识别模型...

    JAVA英语单词(带音标).

    ### JAVA英语单词(带音标) #### 描述: 本文档主要收录了JAVA开发过程中常用的英语词汇及其音标,旨在帮助开发者快速记忆并提高开发效率。 #### 核心知识点详解: ##### 1. Java基础概念 - **['ɔbdʒekt]['ɔ:...

    通用静态页面生成系统

    2. 部署自动化:通过CI/CD(持续集成/持续部署)工具,如Jenkins、GitLab CI/CD,实现静态页面的自动构建和部署。 3. 多语言支持:对于多语言网站,系统应具备内容语言切换功能,支持不同语言版本的静态页面生成。 4...

    java播放器源码-fantasy-football-scraper:该存储库包含使用Selenium和jsoup外部库从多个外部源抓取NFL

    【标题解析】 "java播放器源码-fantasy-football-scraper"这个标题表明这是一个基于Java语言的项目...通过这个项目,开发者不仅可以学习到数据抓取技术,还能了解开源项目管理、Java编程实践以及Web应用的自动化测试。

    java爬虫源代码

    Java爬虫源代码是用于自动化抓取网页信息的程序,主要应用于数据分析、信息提取和搜索引擎优化等领域。在Java中开发爬虫,可以利用其强大的类库和跨平台特性,实现高效稳定的数据抓取。本项目包含以下几个核心知识点...

    jsoup-1.11.3.jar

    在实际应用中,Jsoup广泛用于内容抓取、数据挖掘、自动化测试、网页维护等场景。例如,新闻聚合服务可能利用Jsoup定期抓取各个网站的新闻标题,SEO工具可能用它来检查网站的HTML结构是否符合标准,开发者也可能用它...

    jsp URLRewirte地址静态化

    JSP URLRewrite地址静态化是一个重要的Web开发技巧,通过使用`URLRewriteFilter`工具,我们可以实现动态URL的静态化展示,进而提升网站的SEO效果和用户体验。正确配置和使用该工具,对于提升网站的整体质量有着积极...

    JAVA Web程序设计-3期(KC006) 02单元案例_Web技术概述案例.doc

    Java Web程序设计是开发基于Java...综上所述,Java Web程序设计涵盖了Web技术的基本原理,包括静态网页与动态网页的特性,以及C/S和B/S架构的选择与应用。理解和掌握这些基础知识对于成为一名合格的Web开发者至关重要。

Global site tag (gtag.js) - Google Analytics