假设你需要获取51job人才网上java人才的需求数量,首先你需要分析51job网站的搜索这一块是怎么运作的,通过解析网页的源代码,我们发现了以下一些信息:

1. 搜索时页面请求的URL是 http://search.51job.com/jobsearch/search_result.php

2. 请求所用的方法为:POST

3. 返回的页面的编码格式为:GBK

4.

假设我们想获取搜索java人才时结果页面中显示的需求数量,我们发现数量位于返回的HTML数据中这样的一段代码之中:

1-30

/ 14794

,于是我们可以得到这样的一个模式:".+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包括以下属性:

/** *//**  * 需要获取资源的目标地址,不包含查询串

*/privateString target;

/** *//**  * get请求时的查询串,或post请求的请求数据

*/privateString queryData="";

/** *//**  * 请求方式,get / post

*/privateString method="GET";

/** *//**  * 返回的数据的编码类型

*/privateString charset="GBK";

/** *//**  * 抓取数据的模式,将根据模式的分组来返回数据列表

*/privateString pattern;

创建Resource的一个对象,封装请求数据:

Resource res=newResource();

res.set

//在这里设置与请求有关的信息

以下为抓取内容的代码:

//假设以下代码中res对象封装了所有的请求信息。

//URL指向目的地。

//res.getTarget返回目标地址,且当为get请求时,这个地址包含了查询串的信息URL url=newURL(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=newBufferedReader(newInputStreamReader(

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);//检测当前行是否与要求结果的模式相匹配booleanb=m.matches();

if(!b){

continue;

   }intsize=m.groupCount();

   List result=newArrayList(size);

for(inti=0; i{

     result.add(m.group(i+1));//如果有多个分组,则取出所有分组,并把最终结果做为列表返回}returnresult;

}

如果不需要通过提交表单数据给服务器就能抓取到最终结果,显然上面的操作就有点小题大作了,删除上面的部分代码就可以了。

补充:上文仅做java学习用,项目中需要实现网页抓取,可以去了解一下JSOUP(http://jsoup.org/)和HTTPComponent(http://hc.apache.org/)

java抓取页面数据_通过java抓取任何指定网页的数据相关推荐

  1. java抓取页面表格_用java实现爬虫抓取网页中的表格数据功能源码

    [实例简介] 使用java代码基于MyEclipse开发环境实现爬虫抓取网页中的表格数据,将抓取到的数据在控制台打印出来,需要后续处理的话可以在打印的地方对数据进行操作.包解压后导入MyEclipse ...

  2. java 设置pdf页面大小_通过Java实现对PDF页面的详细设置

    前言 下面的示例将介绍通过Java编程来对PDF页面进行个性化设置的方法,包括设置页面大小.页边距.纸张方向.页面旋转等.这里有如下多种页面大小尺寸可供选择: 同时,设置文档内容旋转时,可支持如下角度 ...

  3. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  4. wireshark 抓 蓝牙数据_使用Wireshark 抓取数据包

    Wireshark 是一个网络封包分析软件.网络封包分析软件的功能是获取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换. 一  ...

  5. 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法

    halo,大家好,我是特仑苏,今天呢给大家分享一些Python从网站抓取数据的一些方法,希望可以给大家带来一些帮助! 原作者:Octoparse团队 原出处:作品文(从网站抓取数据的3种最佳方法)/网 ...

  6. python抓取经典评论_通过Python抓取天猫评论数据

    每日干货好文分享丨请点击+关注 对商业智能BI.数据分析挖掘.大数据.机器学习感兴趣的加微信tsbeidou,邀请你进入交流群. 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析 ...

  7. java读取pdf多表格_在Java中使用tabula提取PDF中的表格数据

    问题:如何将pdf文件中指定的表格数据提取出来? 尝试过的工具包有:pdfbox.tabula.最终选用tabula 两种工具的比较 pdfbox 其中,pdfbox能将pdf中的内容直接提取成Str ...

  8. python爬取饿了么外卖商家数据_用python抓取饿了么无证店铺

    一.前言 饿了么平台上很多店铺都无营业执照,只能借用他人的营业执照上传开店.那就想看看附近有多少这样无证共用营业执照的店铺. 先看一下抓取的截图,竟然有这么多店没有营业执照. mongodb3.png ...

  9. java jsp取静态常量_获取java静态

    Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...

最新文章

  1. 业务层面缓存穿透的解决方案
  2. SpringBoot+MyBatisPlus+ElementUI一步一步搭建前后端分离的项目(附代码下载)
  3. C++中的开闭原则使用C++多态功能实现附源码
  4. Mysql:is not allowed to connect to this MySQL
  5. OpenGL 持久映射分形的实例
  6. 31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization
  7. java反射 初始化bean_通用javabean初始化(反射机制)
  8. 如何给APP开发属于自己的小程序
  9. ST Visual Programmer批量烧写教程
  10. 薪资被倒挂?是怒刷 LeetCode,还是另寻他路?
  11. 19.浏览器Window服务($window)
  12. DataGrip 上手体验,真香!
  13. java基础---线程
  14. 股票历史数据-股票历史交易数据下载成Excel,股票历史交易数据查询
  15. 随机数rand和srand的用法
  16. win10家庭版无法更改账户名称怎么办?
  17. ubuntu12.04安装puppet foreman
  18. 2、Horizon 设计规划
  19. Python开源游戏推荐,《帝国时代2》
  20. 跟着NC学cfDNA全基因组片段化丰度谱分析

热门文章

  1. 杭州学计算机大学排名,我心目中的浙江高校排名
  2. AI小作文搞崩科大讯飞股价 科技“魔法”反噬科企
  3. 如何安装govendor并打开项目
  4. 青龙-京东仓库收集【2022.6.21更新】
  5. js添加多个子节点_javaScript给元素添加多个class的简单实现
  6. Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全
  7. JSON Schema入门
  8. 改变世界的十大地理学思想
  9. vuex 源码分析_深入Vuex原理(上)
  10. vue.js毕业设计,基于vue.js前后端分离教室预约小程序系统设计与实现