假设你需要获取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&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包括以下属性:
以下为抓取内容的代码:
如果不需要通过提交表单才能抓取到最终结果,显然上面的操作就有点小题大作了,删除上面的部分代码就可以了。如果还不是很明白的话,可以QQ(370017514)和我联系。