通过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抓取任何指定网页的数据,里面介绍了java如何实现抓取技术,抓取指定的网页数据并解析
这个程序利用java抓取网页内容,然后生成生成静态页面
Java抓取https网页数据,解决peer not authenticated异常。导入eclipse就能运行,带有所用的jar包(commons-httpclient-3.1.jar,commons-logging.jar,httpclient-4.2.5.jar,httpcore-4.2.4.jar)
import java.io.DataInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; public class UrlHtml { @SuppressWarnings("deprecation") public ...
java网页抓取数据
java抓取网站数据
Java网页抓取数据
Java抓取网页数据的两种方法:(1)抓取原网页 (2)抓取网页JS返回数据
java抓取网页数据实现
非常好的一个java版本的网络爬虫,下载直接可以运行。可以后台登陆然后再抓取。值得大家研究。
利用HttpClient抓取网页中简单的数据,数据可存入数据库进行分析
java抓取网页数据,主要用于抓取手机号和身份证查询网站的数据。
简单的实现网页数据抓取的demo。java实现
java抓取网页java工具类java抓取网页java工具类
抓取策略--Web信息检索与数据抓取-反向链接数策略--拓展.pdf抓取策略--Web信息检索与数据抓取-反向链接数策略--拓展.pdf抓取策略--Web信息检索与数据抓取-反向链接数策略--拓展.pdf抓取策略--Web信息检索与数据抓取-...
抓取策略--Web信息检索与数据抓取-反向链接数策略--拓展.ppt抓取策略--Web信息检索与数据抓取-反向链接数策略--拓展.ppt抓取策略--Web信息检索与数据抓取-反向链接数策略--拓展.ppt抓取策略--Web信息检索与数据抓取-...
点评网美食数据抓取代码--java 实现
java爬虫抓取网页数据教程.pdf
可以直接运行。java利用htmlparser抓取网页数据
网页抓取软件 网页抓取软件 网页抓取软件