之超同志今天问我会不会抓网页的内容,然后把一些表格整理成excel。

好吧,我是不会的,但是我想试试,结果还是可行的。

先说说他的需求吧,他需要把http://www.zjex.com.cn/view/company.php?func=listAll&catalog=0401&page=1这个网站里的所有公司信息都存在一张excel表格里。

我之前没有使用java抓过网页内容,不过用vb.net写过,稍微知道一些。

我搜索到了这篇文章的内容:http://blog.csdn.net/xiaoyu411502/article/details/4500806

然后对其代码删减了点,就可以抓网页的源代码了。

github地址:https://github.com/FieldSoft-HelloClyde/NetGrab

对于其他网址有相应的适配版本

下面是程序执行的第一步,抓取第一页到第22页的内容,把公司子网页的链接存下来。

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;public class Main {/*** 主函数* @param args*/static public void main(String[] args){String SrcWebSiteUrl = new String("http://www.zjex.com.cn/view/company.php?func=listAll&catalog=0401&page=");int WebSitePageId = 1;ArrayList<String> WebUrlArrayList = new ArrayList<String>();for (WebSitePageId = 1;WebSitePageId <= 22;WebSitePageId ++){//抓取网页内容String WebSiteString;WebSiteString = GetWebSiteSourceCode("http://www.zjex.com.cn/view/company.php?func=listAll&catalog=0401&page=" + WebSitePageId);//System.out.println(WebSiteString);GetWebUrl(WebSiteString,WebUrlArrayList);}}/*** 从网页源代码中获取需要的网址,存入列表中* @param WebSiteString* @return*/public static void GetWebUrl(String WebSiteString,ArrayList<String> DesArray){String KeyString = new String("<div class=\"comimg fl\"><a href=\"");String EndString = new String("\">");int SearchFromIndex = 0;int SearchIndex;SearchIndex = WebSiteString.indexOf(KeyString, SearchFromIndex);while (SearchIndex != -1){String TempUrl;int StringEndIndex;StringEndIndex = WebSiteString.indexOf(EndString, SearchIndex + KeyString.length());TempUrl = WebSiteString.substring(SearchIndex + KeyString.length(), StringEndIndex);System.out.println(TempUrl);DesArray.add(new String(TempUrl));SearchFromIndex = StringEndIndex + EndString.length();SearchIndex = WebSiteString.indexOf(KeyString, SearchFromIndex);}}/*** 获取指定网页内容* @param url* @return*/public static String GetWebSiteSourceCode(String url) {  StringBuffer temp = new StringBuffer(); try {  HttpURLConnection uc = (HttpURLConnection)new URL(url).  openConnection();  uc.setConnectTimeout(10000);  uc.setDoOutput(true);  uc.setRequestMethod("GET");  uc.setUseCaches(false);  InputStream in = new BufferedInputStream(uc.getInputStream());  Reader rd = new InputStreamReader(in, "utf-8");  int c = 0;  while ((c = rd.read()) != -1) {  temp.append((char) c);  }  in.close();  } catch (Exception e) {  e.printStackTrace();  }  return temp.toString();  }
}

然后是第二步内容,根据第一步的url,对网页的表格内容进行抓取,保存到txt文档中,每一项都用空格分开。

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;public class GetTable {public static void main(String[] args){try {String UrlTextFileName = new String("d:/url.txt");Scanner FileScanner = new Scanner(new FileReader(UrlTextFileName));PrintWriter DesTxt = new PrintWriter("d:/table.txt");String[] TypeStrArray = {"公司名称","公司简称","企业代码","法人代表","挂牌日期","董秘","董秘电话","董秘QQ","董秘邮箱","注册日期","注册资本","推荐机构","会计师事务所","所属板块","所属行业","所在地","注册地址","办公地址","公司网址","经营范围"};//输出表头for (String TempStr:TypeStrArray){DesTxt.print(TempStr + " ");}DesTxt.println();while (FileScanner.hasNextLine()){String WebUrl = FileScanner.nextLine();String WebSiteString = Main.GetWebSiteSourceCode("http://www.zjex.com.cn" + WebUrl);ReadTable(WebSiteString,DesTxt,TypeStrArray);}DesTxt.close();} catch (FileNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}public static void ReadTable(String WebSiteString,PrintWriter DesPW,String[] TypeArray){int ArrayIndex = 0;for (ArrayIndex = 0;ArrayIndex < TypeArray.length;ArrayIndex ++){int SearchIndex = WebSiteString.indexOf(TypeArray[ArrayIndex]);//读取下一行int StartIndex = WebSiteString.indexOf((char)13, SearchIndex) + 1;int EndIndex = WebSiteString.indexOf((char)13,StartIndex);String TempStr = WebSiteString.substring(StartIndex, EndIndex);//对获取的字符串处理String DesStr = GetValueString(TempStr);System.out.println(DesStr);DesPW.print(DesStr + " ");}DesPW.println();}public static String GetValueString(String Src){StringBuffer DesStr = new StringBuffer("");boolean IsBlock = false;for (int index = 0;index < Src.length();index ++){char TempChar = Src.charAt(index);if (IsBlock){if (TempChar == '>'){IsBlock = false;}}else{if (TempChar == '<'){IsBlock = true;}else{DesStr.append(TempChar);}}}return DesStr.toString().trim();}
}

保存在txt里后,用excel打开这个txt就会出现向导,跟着向导,选择使用分隔符分割,分隔符选择空格,然后把每一列类型都改为文本。

好了,任务完成了

贴一下成果

java 抓取网页内容小工具相关推荐

  1. java抓取网页内容

    今天做项目时用到java抓取网页内容,本以为很简单的一件事但是还是让我蛋疼了一会,网上资料一大堆但是都是通过url抓取网页内容,但是我要的是读取本地的html页面内容的方法,网上找不到怎么办我瞬间了! ...

  2. jsoup 获取html中body内容_jsoup实现java抓取网页内容

    jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据.jsoup ...

  3. java socket抓取资源_Java 通过 Socket 的形式抓取网页内容

    package com.hmw.net; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IO ...

  4. java socket 获取网页源代码_通过java.net.Socket 类抓取网页内容

    /** 文件名 : Firstsocket.java 描述 :通过 java.net.Socket 类访问一个web页面,并且返回结果 作者: 慈勤强 cqq1978@yeah.net 参考:http ...

  5. 最新抓取微信小程序源码教程+附逆向工具WxappUnpacker

    正文: 文章目录 前言 一.工具准备(免费) 1 解密工具 2 逆向工具 二.解密小程序 1.确认小程序包位置 2.打开一个小程序 3.解密小程序包 三.逆向小程序 1.检查nodejs 2.安装依赖 ...

  6. java爬取网页内容 简单例子(2)——附jsoup的select用法详解

    [背景] 在上一篇博文 java爬取网页内容 简单例子(1)--使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则 ...

  7. java抓取网站数据

    java 抓取网站数据 假设你需要获取51job 人才网上java 人才的需求数量,首先你需要分析51job 网站的搜索这 一块是怎么运作的,通过解析网页的源代码,我们发现了以下一些信息: 1. 搜索 ...

  8. java 抓取网页乱码_java抓取网页乱码问题的处理

    今天同事做了一个我们感觉很牛B的彩票预测程序,采用的是遗传算法实现,于是我"剽"来学习先,但是部署到我电脑上以后,就有问题了: 1.用她的抓取程序得到的网页内容出现乱码,导致数据无 ...

  9. 抓取微信小程序源码教程,扒微信小程序文件等

    前言: 想成为一名微信小程序的开发者,前端思路的学习和安全意识是非常有必要的,故务必掌握小程序反编译技能.这里用到了2个工具<包解密>与<反编译>(非原创,均来自网上的大佬), ...

最新文章

  1. 神经网络AI加速器技术
  2. 修改Project中的表名及字段名
  3. 打印折痕方向(二叉树应用)
  4. python变量初始化_tensorflow之变量初始化(tf.Variable)使用详解
  5. 和get redis_SpringBoot整合Redis,你get了吗?
  6. 【转】1.C Task.CompletedTask和Task.Result小记
  7. android 动态规划,7. 动态规划(二)Android移动应用开发.pdf
  8. MIND多兴趣召回实战(一)
  9. 关于陀螺仪 deviceorientation
  10. mac 安装 JDK
  11. 【信号与系统】DTFT离散时间傅里叶变换
  12. 我的世界命令计算机,我的世界电脑版指令大全,你想要的指令都在这里
  13. 微信扫码下载APP,苹果,安卓多码合一,微信下载pdf报告,文件解决方案
  14. 交换element-ui的MessageBox弹框的确定和取消位置
  15. 邓俊辉数据结构与算法学习笔记-第四章
  16. 复制一个维基百科!—— 维基技术梳理
  17. 快速学会使用association和collection
  18. 如何给gif图添加水印
  19. c语言三角形判定条件,c语言判定三角形的各种类型——请大家指点
  20. git push的详细使用

热门文章

  1. RSA非对称加密传输---前端加密解密(VUE项目)
  2. 十四、Nginx--rewrite规则
  3. JAYのpython学习笔记——数据结构之列表
  4. android h5游戏图片不缓存,H5小游戏资源缓存方法与流程
  5. JavaScript 学习笔记(八)前后端交互;Ajax进行前后端交互
  6. strtok strtok_s strsep
  7. Access 一些内部函数(Access 帮助里) .
  8. web期末作业设计网页:动漫网站设计——蜡笔小新(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 动漫网页设计作业 web网页设计与开发 html实训大作业...
  9. 【Apollo学习笔记】从零开始Apollo系统安装
  10. 安装Robo 3T(Robomongo)MongoDB可视化工具