java爬虫实战
1.下载jxl。jar包,网上多的是
2.编写如下代码:
package com.beyond.url;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import jxl.Workbook;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class TestDemo {
/**
* 获取整个文本内容
* @param urlHtml
* @param Language
* @return
*/
public String getContent(String urlHTML)
{
String temp;
StringBuffer sb=new StringBuffer();
try {
URL ulr=new URL(urlHTML);
BufferedReader b=new BufferedReader(new InputStreamReader(ulr.openStream(),"utf-8"));
while ((temp=b.readLine())!=null) {
sb.append(temp);
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* A 标签文字获取
* @param content
* @return
*/
public List<String> getTagA_WenZi(String content)
{
String regex = "<a.*?</a>";
Pattern pa = Pattern.compile(regex);
Matcher ma = pa.matcher(content);
List<String> list = new ArrayList<String>();
while (ma.find()) {
list.add(ma.group());
}
return list;
}
/**
* Span标签文字获取
* @param content
* @return
*/
public List<String> getTagSpan_WenZi(String content)
{
String regex = "<span.*?</span>";
Pattern pa = Pattern.compile(regex);
Matcher ma = pa.matcher(content);
List<String> list = new ArrayList<String>();
while (ma.find()) {
list.add(ma.group());
}
return list;
}
/**
* P 标签文字获取
* @param content
* @return
*/
public List<String> getTagP_Wenzi(String content)
{
String regex = "<p.*?</p>";
Pattern pa = Pattern.compile(regex);
Matcher ma = pa.matcher(content);
List<String> list = new ArrayList<String>();
while (ma.find()) {
list.add(ma.group());
}
return list;
}
/**
*
* div 标签获取
*/
public List<String> getTagDiv_Wenzi(String content)
{
String regex = "<div.*?</div>";
Pattern pa = Pattern.compile(regex);
Matcher ma = pa.matcher(content);
List<String> list = new ArrayList<String>();
while (ma.find()) {
list.add(ma.group());
}
return list;
}
/**
* 写入Excel
* @throws IOException
* @throws RowsExceededException
* @throws WriteException
*/
public void WriteToExcel(WritableWorkbook workbook,WritableSheet sheet,int cols,int rows,String Data,Label[] lb) throws IOException, RowsExceededException, WriteException
{
lb[rows]=new Label(cols,rows,Data);
Label labe1=new Label(1,0,"TagName_Of_A_Information");
sheet.addCell(labe1);
Label labe2=new Label(6,0,"TagName_Of_Span_Information");
sheet.addCell(labe2);
//Label label=new Label(cols,rows,Data);
sheet.addCell(lb[rows]);
}
public static void main(String[] args) throws InterruptedException, RowsExceededException, WriteException, IOException {
TestDemo t=new TestDemo();
String content=t.getContent("https://www.oracle.com/sun/index.html");
//System.out.println(content);
List<String> aTagString=t.getTagA_WenZi(content);
List<String> spanTagString=t.getTagSpan_WenZi(content);
List<String> pTagString=t.getTagP_Wenzi(content);
List<String> divTagString=t.getTagP_Wenzi(content);
WritableWorkbook workbook=Workbook.createWorkbook(new File("D:\\Data\\OracleTestDemo.xls"));
WritableSheet sheet=workbook.createSheet("Information", 0);
sheet = workbook.getSheet(0);
System.out.println("a标签摘取");
Label[] ji=new Label[aTagString.size()+spanTagString.size()];
for (int i = 0; i < aTagString.size(); i++) {
String aString=aTagString.get(i).replaceAll("<[^>]*>| |\t|\n|&[\\s\\S]*;{1}","").trim();
if (aString!="") {
t.WriteToExcel(workbook,sheet,1,i+1,aString,ji);
}
}
System.out.println("Span标签摘取");
for (int i = 0; i < spanTagString.size(); i++) {
String aString=spanTagString.get(i).replaceAll("<[^>]*>| |\t|\n|&[\\s\\S]*;{1}","").trim();
if (aString!=null) {
//System.out.println(aString);
t.WriteToExcel(workbook,sheet,6,i+1,aString,ji);
}
}
System.out.println("P标签摘取");
for (int i = 0; i < pTagString.size(); i++) {
String aString=pTagString.get(i).replaceAll("<[^>]*>| |\t|\n|&[\\s\\S]*;{1}","").trim();
if (aString!=null) {
//System.out.println(aString);
t.WriteToExcel(workbook,sheet,10,i+1,aString,ji);
}
}
System.out.println("Div标签摘取");
for (int i = 0; i < divTagString.size(); i++) {
String aString=divTagString.get(i).replaceAll("<[^>]*>| |\t|\n|&[\\s\\S]*;{1}","").trim();
if (aString!=null) {
//System.out.println(aString);
t.WriteToExcel(workbook,sheet,10,i+1,aString,ji);
}
}
//开始写入和关闭文件
workbook.write();
workbook.close();
System.out.println("写入完毕");
}
}
java爬虫实战的更多相关文章
- java爬虫中jsoup的使用
jsoup可以用来解析HTML的内容,其功能非常强大,它可以向javascript那样直接从网页中提取有用的信息 例如1: 从html字符串中解析数据 //直接从字符串中获取 public stati ...
- Java基础-爬虫实战之爬去校花网网站内容
Java基础-爬虫实战之爬去校花网网站内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 爬虫这个实现点我压根就没有把它当做重点,也没打算做网络爬虫工程师,说起爬虫我更喜欢用Pyt ...
- Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
- Java爬虫项目实战(一)
目的: 通过网络爬虫爬取中国最小粒度的区域维度信息,包括省(Province) .市(City).县(County).镇(town).村委会(village) 主网站链接: http://www.st ...
- Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗
Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗 零.致谢 感谢BOSS直聘相对权威的招聘信息,使本人有了这次比较有意思的研究之旅. 由于爬虫持续爬取 www.zhipin.com 网 ...
- Pyhton爬虫实战
Pyhton爬虫实战 零.致谢 感谢BOSS直聘相对权威的招聘信息,使本人有了这次比较有意思的研究之旅. 由于爬虫持续爬取 www.zhipin.com 网站,以致产生的服务器压力,本人深感歉意,并没 ...
- 学校实训作业:Java爬虫(WebMagic框架)的简单操作
项目名称:java爬虫 项目技术选型:Java.Maven.Mysql.WebMagic.Jsp.Servlet 项目实施方式:以认知java爬虫框架WebMagic开发为主,用所学java知识完成指 ...
- PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- webmagic的设计机制及原理-如何开发一个Java爬虫
之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...
随机推荐
- spring的ResultSetWrappingSqlRowSet使用rs.getTimestamp取oracle数据库时分秒问题
oracle 11G数据库使用ojdbc14.jar驱动 rs.getTimestamp取不出时分秒问题: ResultSetWrappingSqlRowSet rs = processDao.que ...
- javascript模块化编程(AMD规范的加载器)
关于AMD规范可以参考阮一峰的这篇文章Javascript模块化编程(二):AMD规范 简单来说,AMD规范就是异步方式加载模块的一种方式,避免因为模块加载过慢而导致浏览器“假死”. 先贴一个学习地址 ...
- IIS不定期Crash和Oracle“未处理的内部错误(-2)”的问题分析
问题描述:系统不定期报出Oracle“未处理的内部错误(-2)”,严重时IIS会Crash 典型异常日志如下: Exception type: System.AccessViolationExce ...
- SQL集合运算参考及案例(一):列值分组累计求和
概述 目前企业应用系统使用的大多数据库都是关系型数据库,关系数据库依赖的理论就是针对集合运算的关系代数.关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式.不过我们在工作中发现,很多人 ...
- SQLSERVER 605 尝试在数据库 %d 中提取逻辑页 %S_PGID 失败。 该逻辑页属于分配单元 %I64d,而非 %I64d。
今天在开发过程中写了一个存储过程发现执行的时候,时不时会提示605错误,重新执行又可能会成功. 百度了一下,很多说法是硬件的IO问题,就是存储器反馈给SQL SERVER 写入成功,但下次读取的时候S ...
- .net托管平台appharbor使用
这篇文章是网上转过来的,在AppHarbor使用Git上传Code的时候,需要输入用户名和密码,就是appharbor登陆的用户名和密码. 可以参考这篇文章http://www.freehao123. ...
- 封装类的方式访问数据库(封装字符串、json)
<?php class DBDA { public $host="localhost";//服务器地址 public $uid="root";//用户名 ...
- 08 Linux下MySQL的下载、安装及启动
测试环境 主机系统:Win7 64位 虚拟机:VMware® Workstation 11.1.0 虚拟机系统:CentOS 6.5 64位 Kernel 2.6.32-431.e16.x86_6 ...
- 激活Maven profile的几种方式
首先简单介绍下 Maven 的 profile 是什么.对于人来说,profile 是指人的肖像,轮廓,比如论坛里每个人注册了帐号后,可以设置自己的 profile,放上照片,介绍等等.对于 Mave ...
- Redis启动警告错误解决
启动错误 (1)WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxc ...