关闭

用watij爬取网页内容

2814人阅读 评论(0) 收藏 举报

段时间,移动组找我帮忙抓个数据:http://jwc.hust.edu.cn:81/index.aspx,我看了看,觉得应该没问题吧,就答应了。后来发现,asp.net真不是一般的变态啊。。。
尝试了各种方法,都不行,只好请教师傅。师傅也很纠结,后来不知道从哪儿搜出了个方法,用watir(web application test in ruby),通过ruby打开firefox然后访问网页,并对网页进行操作,来获取数据。
看起来很简单。。但是麻烦在于要编译一个firefox。。编译一个firefox也不是特麻烦。。麻烦在还得加个jssh的extension。。加个extension也不是很麻烦。。还不能用firefox的新版本。。话说那弄个旧版本吧,不难吧。。旧版本还我勒个去不能再ubuntu11.10上编译。。。。。后来纠结到了win32上,得把firefox删了,下个3.X的版本。。。
搞了好久,搞的好无语,最后周导居然还真的整出来了。。。这都不是重点,重点是我感觉这太难搞了,平台要求太高啊,兼容性太差啦。。 好吧其实是我嫌麻烦。。。
然后我打开了google,输入 watir java。 喵了个咪的,这不是有watij(web application test in java)吗!
一开始我还以为只是不用装ruby了而已,用了之后发现,什么系统版本,什么firefox版本都弱爆了好不好,别人直接把mozilla给你封装好了,直接用啊。所以最后发现真的是很简单。。

01 package com.zhiweizhang.crawler;
02  
03 import java.io.BufferedWriter;
04 import java.io.File;
05 import java.io.FileWriter;
06  
07 import org.watij.webspec.dsl.Tag;
08 import org.watij.webspec.dsl.WebSpec;
09  
10 public class WatijCrawler {
11  
12     private static String homepage = "http://jwc.hust.edu.cn:81/index.aspx";
13  
14     //教学楼对应value值,西十二8,东九7,西五5,东十二1
15     private static String[] building = {"西十二""东九""西五""东十二"};
16     private static String[] buildingValue = {"8""7""5""1"};
17  
18     public static void main(String[] args) throws Exception {
19         //打开网页,并隐藏webspec界面
20         WebSpec ws = new WebSpec().mozilla().hide();
21         ws.open(homepage);
22  
23         for (int i = 0; i < 4; i ++) {
24             System.out.println("Fetching information of building " + building[i]);
25             ws.find.select().with.id("Build").set("value", buildingValue[i]);//选择教学楼
26             ws.find.input().with.name("btnRightall").click();//选择所有教室
27             ws.find.input().with.name("Button1").click();//点击查询
28             int page = 0;
29             File file;
30             Tag tag = ws.find.a().with.innerText("后页");
31             //下载所有页的网页
32             while (tag.exists()) {
33                 page++;
34                 file = new File(building[i] + "/" + page + ".html");
35                 BufferedWriter bw = new BufferedWriter(new FileWriter(file));
36                 System.out.println("Downloading page " + page + " ...");
37                 bw.write(source());
38                 bw.close();
39                 tag.click();
40                 tag = ws.find.a().with.innerText("后页");
41             }
42             System.out.println("All the pages have been downloaded.");
43         }
44     }
45  
46 }

太方便了,这个斑马以后登录各种网站都可以直接这么写了。
值得一提的是,watij其实是一个测试工具,用于测试web应用,就如名字所说。。。

详情参考:http://watij.com/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5383590次
    • 积分:53564
    • 等级:
    • 排名:第52名
    • 原创:321篇
    • 转载:1649篇
    • 译文:19篇
    • 评论:161条
    博客专栏
    网上乐园
    最新评论