记一次简单的网页数据抓取

摘要:
之前的任务之一是在服务器上复制文本字符串。这是一个简单的操作,但需要重复大约50次。每次大约花了三分钟。之后,花了两个多小时才进入。登录部分是因为服务器使用Windows安全验证,如图所示:它需要模拟登录以获取网页数据。登陆后,可以直接获取网页内容,然后截取数据。最后,在最外层添加一个循环,并执行一次要获取的服务器地址,以便可以一次检索所有服务器上的数据。

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

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

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

记一次简单的网页数据抓取第1张

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

首先用fiddler抓取http传输的数据包,在报头部分发现一串字符串:记一次简单的网页数据抓取第2张

经过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;
    }
}

免责声明:文章转载自《记一次简单的网页数据抓取》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Excel-漏斗图分析(差异分析)Flink作业使用windows的nc命令产生socket流下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTTP请求状态码

标签:请求状态码http 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。 此状态代码提供了有关请求状态的信息,且为 Googlebot 提供了有关您网站和请求的网页的信息。 一些常见的状态代码为: 200 -...

python基础整理6——爬虫基础知识点

 爬虫基础 什么是爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系...

从网页抓取数据的一般方法

首先要了解对方网页的运行机制 ,这可以用httpwacth或者httplook来看一下http发送和接收的数据。这两个工具应该说是比较简单易懂的。这里就不再介绍了。主要关注的内容是header和post的内容。一般会包括cookie,Referer页面和其他一些乱其八糟可能看不懂的变量,还有就是正常交互的参数,比如需要post或者get的querystri...

抓取网页数据(金融股市实时数据)

最近查了几天的资料去写一个网页抓取股票实时数据的程序,网上一堆资料都是翻来覆去的讲解同样的方法,还有都是抓取一般的没有变化的对时间要求不要的网页数据,然而对于股票实时数据的抓取要求的是每秒钟都会由很多股票数据在发生变化,要保证程序能抓取到每秒钟这些变化着的数据,好了,出于这个目的开始在网上搜说数据,很多人建议用libcurl方法,好的,libcurl很强大...

C# 抓取网页Html源码 (网络爬虫)

http://www.cnblogs.com/wxxian001/archive/2011/09/07/2169519.html 刚刚完成一个简单的网络爬虫,因为在做的时候在网上像无头苍蝇一样找资料。发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找。所以我想发这篇文章让一些要做这个功能的朋友少走一些弯路。 首先是抓取Html源码,并选择&l...

如何使用Fiddler抓取APP接口和微信授权网页源代码

 Fiddler,一个抓包神器,不仅可以通过手机访问APP抓取接口甚至一些数据,还可以抓取微信授权网页的代码。 下载安装 1. 下载地址(官网):  https://www.telerik.com/download/fiddler 2. 或者关注以下公众号,回复“抓包工具”就可以获取网盘地址。 3. 官网填完账号等信息下载,然后安装,打开。 设置当前电脑...