网络爬虫之java基础.docx
- 文档编号:3847112
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:17
- 大小:929.21KB
网络爬虫之java基础.docx
《网络爬虫之java基础.docx》由会员分享,可在线阅读,更多相关《网络爬虫之java基础.docx(17页珍藏版)》请在冰豆网上搜索。
网络爬虫之java基础
网络爬虫之java基础
这张图为我给自己研究所人讲网络爬虫的一个流程,本人也将按照这个流程来讲网络爬虫,如果你的基础较好,可以直接跳过相关流程。
1、Java中maven的使用
使用maven能很轻松的从网络中下载所需的插件
及依赖(下载程序所依赖的JAR包),存储在某一位置中,在程序编译时自动去寻找jar包。
初次使用maven时,可能会很慢,会遇到很多问题(国外的源,下载jar包很慢)可以配置一些国内的源,如csdn的。
使用maven最大的方面,在ecliplse中建工程的时候,我们选择maven工程。
如下图所示,maven工程上面会有一个M的标致,同时生成一个pom.xml文件,通过在pom.xml中加入以下类型的文件,便可把jar包引入到MavenDependencies中。
2、log4j
log4j的介绍
log4j是Apache下的一个开源项目,用来控制日志信息,方便的日志记录。
之所以要记录日志,可以详细的记录程序发生了什么,在哪里发生的,有没有错误等。
在使用log4j之前需要使用maven引入log4j的jar包。
其中,日志的输出级别(%p):
DEBUG,INFO,WARN,ERROR,FATAL(每个严重的错误事件将会导致应用程序的退出)
log4j提供的几种方法
(1)Appender方法:
日志输出目的地
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)。
(2)Layout方法:
日志输出格式
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)。
使用步骤
(1)导入log4j-1.2.8.jar包(我们使用maven)。
(2)在根目录src下建立并配置log4j.properties,如下图所示为我的配置。
(3)使用(演示),如下图所示。
logger.debug(“Thisisdebug.”);
logger.info(“Thisisaninfo.”);
logger.warn(“Thisisawarning.”);
logger.error(“Thisisanerror.”);
logger.fatal(“Thisisafatalerror.”);
3、输入流与输出流
这里也不做很多介绍,简单一点,输入流、输出流就是文件的读与写,当然这样理解比较狭隘。
(1)读取文件(输入流read())、写文件(输出流write())
(2)文件字节流:
FileInputStream()、FileOutputStream()
(3)文件字符流:
FileReader()、FileWriter()
(4)缓冲流(读写能力强,最常用):
BufferedReader()、BufferedWriter()
注意:
缓冲流的源必须是字节流或者字符流
案列:
数据的读写程序以及map的使用
packageFileUtil;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importmons.logging.Log;
importmons.logging.LogFactory;
publicclassFileTest{
staticfinalLoglogger=LogFactory.getLog(FileTest.class);
publicstaticvoidmain(String[]args)throwsIOException{
/******读入的数据存入list<>中******/
List
/******创建所要读的文本******/
Filefile=newFile("E:
\\钱洋个人\\网络爬虫培训\\attentionword.txt");
/******FileReader顺序读取文件*****/
FileReaderfileReader=newFileReader(file);
/******根据FileReader创建的实例******/
BufferedReaderbufferedReader=newBufferedReader(fileReader);
Strings=null;
while((s=bufferedReader.readLine())!
=null){
Data.add(s);
logger.info(s);
}
bufferedReader.close();
fileReader.close();
/******文件读取第二种方式******/
BufferedReaderreader=newBufferedReader(newInputStreamReader(newFileInputStream(newFile("E:
\\钱洋个人\\网络爬虫培训\\b.txt")),"utf-8"));
Strings1=null;
while((s1=reader.readLine())!
=null){
Data.add(s1);
logger.info(s1);
}
reader.close();
/******文件写入第一种方式******/
/*Filefile1=newFile("D:
\\钱洋个人\\网络爬虫培训\\b.txt","utf-8");
FileOutputStreamfileOutputStream=newFileOutputStream(file1);
OutputStreamWriteroutputStreamWriter=newOutputStreamWriter(fileOutputStream);
BufferedWriterbufferedWriter1=newBufferedWriter(outputStreamWriter);*/
/******文件写入快捷方式******/
BufferedWriterwriter=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(newFile("D:
\\钱洋个人\\网络爬虫培训\\d.txt")),"utf-8"));
/******map的使用******/
Map
/******map添加数据******/
for(Stringdata:
Data){
map.put(Integer.parseInt(data.split("\\s")[0]),data.substring(1,data.length()));
}
/******map遍历数据******/
for(Integerkey:
map.keySet()){
System.out.println("key:
"+key+"\tvalue:
"+map.get(key));
writer.append("key:
"+key+"\tvalue:
"+map.get(key)+"\r\n");
}
writer.close();
}
}
1、集合操作
集合创建
Set集合不可以放重复数据,List可以,Map主要存放的是键值对,其中key(主键)不可以重复。
List
Set
Mapmap=newHashMap();
集合数据的添加
list.add();
set.add();
map.put(key,value);
集合的遍历
/******List与Set集合的遍历******/
//第一种遍历方式
for(Stringstr:
list){
System.out.println(str);
}
//第二种遍历方式
for(inti=0;i System.out.println(i+": "+list.get(i)); } //第三种遍历方式 Iterator while(it.hasNext()){ System.out.println(it.next()); } /******Map集合的遍历******/ //第一种方式 for(Stringstr: map.keySet()){ System.out.println("key: "+str+"\tvalue: "+map.get(str)); } /********此种方式快*******/ //第二种方式 for(Entry map.entrySet()){ System.out.println("key: "+entry.getKey()+"\tvalue: "+entry.getValue()); } 下面程序为集合操作的简单测试程序,适合初学者,复制到ecliplse中就可以了。 packageFileUtil; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.HashSet; importjava.util.Iterator; importjava.util.List; importjava.util.Map; importjava.util.Map.Entry; importjava.util.Set; publicclassCollectionTest{ publicstaticvoidmain(String[]args){ List list.add("1"); list.add("1"); list.add("2"); list.add("3"); if(list.contains("1")) System.out.println("yesone"); Set set.add("1"); set.add("1"); set.add("2"); set.add("3"); set.add("5"); set.add("3"); set.add("4"); if(set.contains("2")) System.out.println("yesanother"); Map map.put("map1",1); map.put("map2",1); map.put("map3",3); map.put("map1",2); map.put("map1",1); if(map.containsKey("map1")) System.out.println("yesthekey"); System.out.println(list); System.out.println(set); System.out.println(map); /******循环输出******/ System.out.println("---------------list-------------"); for(Stringstr: list){ System.out.println(str); } for(inti=0;i System.out.println(i+": "+list.get(i)); } /******此种方式效率最高******/ Iterator while(it.hasNext()){ System.out.println(it.next()); } System.out.println("---------------set-------------"); for(Stringstr: set){ System.out.println(str); } Iterator while(setIt.hasNxt()){ System.out.println(setIt.next()); } System.out.println("---------------map(keyset及entryset)-------------"); for(Stringstr: map.keySet()){ System.out.println("key: "+str+"\tvalue: "+map.get(str)); } /********此种方式快*******/ for(Entry map.entrySet()){ System.out.println("key: "+entry.getKey()+"\tvalue: "+entry.getValue()); } /********集合之间的操作*******/ List List list2.add("one"); list2.add("two"); list2.add("three"); list2.add("1"); list1.add(list); System.out.println("list1: \t: "+list1); list1.add(list2); System.out.println("list1: \t: "+list1); list1.addAll(list1); System.out.println("list1: \t: "+list1); list.retainAll(list2); System.out.println("list: \t: "+list); Set Set set2.add("one"); set2.add("two"); set2.add("three"); set1.add(set); set1.add(set2); set1.addAll(set1); System.out.println(set1); set.retainAll(set2); System.out.println(set); Map mapNew.put("new1",map); mapNew.putAll(mapNew); System.out.println(mapNew); } } java基础篇QueryRunner 1、Java操作数据库 如何将爬虫爬取的数据存储下来也是我们关注的问题之前,常用的存储方式有.txt,mysql,hbase等。 前面已经介绍了Java输入流输出流操作文本的方式,现在主要介绍几种Java操作mysql的方式。 java操作数据库第一种方法 这种方法,是操作数据库的最简单,也是最原始的方法。 packagecrawlerTest; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.sql.Statement; publicclassMysqlConnectionTest{ publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{ Connectionconnection=null;//数据库连接的获取 Statementstmt=null;//创建Statement对象 ResultSetrst=null;//创建数据库执行对象 Stringdriver="com.mysql.jdbc.Driver";//数据库驱动 StringdbURL="jdbc: mysql: //127.0.0.1: 3306/test";//操作的数据库地址,端口及库名 Stringuser="root";//数据库用户名 Stringpassword="112233";//数据库密码 Class.forName(driver);//驱动注册 try{ connection=DriverManager.getConnection(dbURL,user,password); }catch(SQLExceptione){ e.printStackTrace(); } //连接数据库 stmt=connection.createStatement(); Stringsql="select*fromauto_forum_commentslimit1,100";//需要查询的语句 rst=stmt.executeQuery(sql); while(rst.next()){ System.out.println(rst.getString(6));//取第6列数据 } rst.close(); stmt.close(); connection.close(); } } java操作数据库的QueryRunner方法 QueryRunner是apache下面的开源操作数据库的工具,其是一款非常实用的操作数据库的工具,也是本人最常用的一种工具。 其中包括batch()、update()、insert()等常用数据操作方法,下面我通过具体的程序来说明这些方法。 首先,我们要创建一个对象类(model),用来封装对象。 如下图所示,为我们在model下建的两个类。 其中Address类为本案例所用的类,主要用来封装数据库中的数据(我们需要操作的数据表),如下图所示。 packagemodel; publicclassAddress{ privateStringaddr_id; privateStringaddr_car; privateStringaddr_url; privateStringaddr_forum; privateStringcraw_time; //在ecliplse中使用快捷键,shift+alt+s快捷生成set、get方法 publicStringgetAddr_id(){ returnaddr_id; } publicvoidsetAddr_id(Stringaddr_id){ this.addr_id=addr_id; } publicStringgetAddr_car(){ returnaddr_car; } publicvoidsetAddr_car(Stringaddr_car){ this.addr_car=addr_car; } publicStringgetAddr_url(){ returnaddr_url; } publicvoidsetAddr_url(Stringaddr_url){ this.addr_url=addr_url; } publicStringgetAddr_forum(){>list1=newArrayList
>();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 爬虫 java 基础