zoukankan      html  css  js  c++  java
  • 记一次简单的网页数据抓取

    之前有一个工作是到服务器上去复制一串文字下来,很简单的操作,但是需要重复50次左右,每次花费大概三分钟,一遍下来两个多小时就进去了。因此就做了这个工具自动抓取数据。

    工具主要做三件事情:登陆,下载,截取。

    登陆部分由于服务器使用的是windows安全校验,如图:

    需要模拟登陆才能获取到网页数据。

    首先用fiddler抓取http传输的数据包,在报头部分发现一串字符串:

    经过base64解密之后得到:Administrator:manage。

    这个便是用户名:密码经过加密之后的字符串。而Authorization:Basic则是一种验证方式,一般通过setRequestProperty来设置。

    搞定登陆之后就可以直接获取到网页内容再进行数据截取了。最后再在最外层加一个循环,将需要抓取的服务器地址一次执行一次,就能一次获取所有服务器上的数据了。

    最后贴代码:

    import java.io.*;
    import java.net.*;
    
    public class getPackageFromWeb {
        public static void main(String args[]) throws Exception {
            String[] servers ={"192.168.0.144:23342","192.168.0.144:23343"};
            StringBuilder result=new StringBuilder();
            for(int i=0;i<servers.length;i++){
                String packagelist = getWebPage("http://"+servers[i]+"/WmRoot/package-list.dsp");
                while(packagelist.indexOf("package-info.dsp?package=")!=-1){
                    packagelist=packagelist.substring(packagelist.indexOf("package-info.dsp?package=")+25,packagelist.length());
                    String tempPackage=packagelist.substring(0, packagelist.indexOf("""));
                    result.append(tempPackage+",");
                }
                result.append("
    ");
            }
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("c:\result.csv"));
            bufferedWriter.write(result.toString());
            bufferedWriter.close();
        }
    
        public static String getWebPage(String Addr) throws Exception {
            String data = "";
            URL url = new URL(Addr);
            HttpURLConnection httpUrlCon = (HttpURLConnection) url.openConnection();
            String author = "Basic QWRtaW5pc3RyYXRvcjptYW5hZ2U=";
            httpUrlCon.setRequestProperty("Authorization", author); 
            httpUrlCon.connect();
            InputStreamReader inRead = new InputStreamReader(
                    httpUrlCon.getInputStream(),"UTF-8");
            BufferedReader bufRead = new BufferedReader(inRead);
            StringBuffer strBuf = new StringBuffer();
            String line = "";
            while ((line = bufRead.readLine()) != null) {
                strBuf.append(line);
            }
            data=strBuf.toString();
            return data;
        }
    }
  • 相关阅读:
    android-自定义View
    java
    记录-常用的开发技巧
    便签:
    zTree 树形控件 ajax动态加载数据
    jquery ajax 传数据到后台乱码的处理方法
    spring + quartz 定时
    SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法
    复制新项目 ,tomcat部署时名字还是旧项目名
    jsp 通用获取所有表单值传后台
  • 原文地址:https://www.cnblogs.com/bgWebMethods/p/4252103.html
Copyright © 2011-2022 走看看