zoukankan      html  css  js  c++  java
  • JAVA学习笔记(一):一个小爬虫的例子

    1.import java.io.*;  

    java.io.*不是一个文件,而是一组类。它是在java.io包里的所有类,*是通配符,比如a*.txt代表的就是以a开头的所有txt文件,“?”是单个词的通配符,比如a?.txt代表的就是以a开头而且名字只有两个字的txt文件

    import的作用是:在你写一个类的时候。里面用到了其他的类,而用到的这个类和你现在写的这个类不是同一个包里,就需要导入那个类的全名

    2.类似于C语言中int main() 的作用

    public class main {  
        public static void main(String[] args) {  

    3.String

    // 定义即将访问的链接  
    String url = "http://www.baidu.com";  
    // 定义一个字符串用来存储网页内容  
    String result = "";  

    详见http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html

    4.Bufferedreader

    // 定义一个缓冲字符输入流  
    BufferedReader in = null;

     BufferedReader类用于缓冲读取字符,将字节流封装成BufferedReader对象,然后用readLine()逐行读入字符流,直到遇到换行符为止(相当于反复调用Reader类对象的read()方法读入多个字符)

    详见http://blog.csdn.net/caixiexin/article/details/6719482

    BufferedReader

    BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

    一般用法:

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
      String data = null;
      while((data = br.readLine())!=null)
      {
       System.out.println(data); 
      }

    5.try{}catch(Excpetion e){}finally{}

    用来捕捉异常

     catch (Exception e) {  
        System.out.println("发送GET请求出现异常!" + e);  
        e.printStackTrace();  // 将错误信息打印出来
    }  
    // 使用finally来关闭输入流  
            finally {  
                try {  
                    if (in != null) {  
                        in.close();  
                    }  
                } catch (Exception e2) {  
                    e2.printStackTrace();  
                }  
            }  
    在java中.close  是关闭的意思。比如session.close();  意思就是关闭session  同时释放内存。
    还有常用的就是和数据库的链接 connection
    在使用完毕之后,也就是一个功能代码的结尾 ,同时会写connection.close();释放内存

    6.new

     // 将string转成url对象  
    URL realUrl = new URL(url); 

    比如说现在有两个类,T1和T2

    T1 a=new T1();

    T2 b=new T1();

    就是new出两个T1的实例;你可以把T1看成是一个模子,new T1();就是按照这个模子做一个东西出来,new几次就做几个,所以做出来的东西并不是一个东西,但是它们很像。
    T2 b=new T1();如果T1继承自T2的话那么程序就正确,否则就是错误代码。如果正确的话,T2 b就是声明要创建的b是T2类型,而new T1();就是创建了一个T1类型赋值给b,因为T1是T2的子类所以是允许的,如果T1和T2里有同名同参同返回方法那么调用的是T1里的。
    7.Connection
    // 初始化一个链接到那个url的连接  
    URLConnection connection = realUrl.openConnection();  
    public URLConnection openConnection()
    throws IOException
    返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
    每次调用此 URL 的协议处理程序的 openConnection 方法都打开一个新的连接。

    如果 URL 的协议(例如,HTTP 或 JAR)存在属于以下包或其子包之一的公共、专用 URLConnection 子类:java.langjava.iojava.utiljava.net,返回的连接将为该子类的类型。例如,对于 HTTP,将返回 HttpURLConnection,对于 JAR,将返回 JarURLConnection。
    返回:
    到该 URL 的 URLConnection。
    // 开始实际的连接  
    connection.connect();  

    8.初始化 BufferedReader

    // 初始化 BufferedReader输入流来读取URL的响应  
    in = new BufferedReader(new InputStreamReader( connection.getInputStream()));  

    InputStreamReader 类

    是字节流通向字符流的桥梁,封裝了InputStream在里头, 它以较高级的方式,一次读取一个一个字符以文本格式输入 / 输出,可以指定编码格式;

    一般用法:

    InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));
       while((ch = isr.read())!=-1)
       {
        System.out.print((char)ch); 
       }

    示例如下

    public static String getHtmlSource( String  url) throws MalformedURLException, IOException {
    URLConnection uc = new URL(url).openConnection();
    uc.setConnectTimeout(10000);
    uc.setDoOutput(true);
    InputStream in = new BufferedInputStream(uc.getInputStream());
    InputStreamReader rd = new InputStreamReader(in,"gb2312");
    int c = 0;
    StringBuffer temp = new StringBuffer();
    while((c = rd.read())!= -1){
           temp.append((char)c);
    }
    in.close();
    return temp.toString();
    }

    9.抓取数据并存储

    // 用来临时存储抓取到的每一行的数据  
    String line;  
    while ((line = in.readLine()) != null) {  
        //遍历抓取到的每一行并将其存储到result里面  
        result += line;  
    }  

    10.输出信息System.out.println

    public class Test {
     public static void main(String[] args) {
      int x = 5;
      int y = 2;
      int a=5,b=4,c=3;
      System.out.println(x+y+"K");
      System.out.println("abc"+a+b+c+3);
     }
    
    }
    结果是:
    7K
    abc5433

    首先,这个跟println输出规则没什么关系
    这个是跟运算规则和“+”连接符有关
    其次x,y,a,b,c都是int型,也就是可用“+”号计算的类型
    最后
    第一个输出x+y+"K"
    从左到右先计算x+y,结果为7是int类型,这里的"+"号是计算符号,而后“+”号是当字符串连接符号处理所以最后int的7和string类型的“K”连接后生成新的string,“7K”
    第二个输出“abc”+a+b+c+3
    也是从左到右计算,因为“abc”是字符串,而后跟“+”号是当字符串连接符号处理,所以是“abc5433”
    其后的“+”号都当成了字符串连接符号

    总之,当“+”号前后有字符串出现时,就当做字符串连接符号处理了。
    例如:
    int a=1;
    String s="a";
    System.out.println(a+s);
    输出"1a"
    System.out.println(s+a);
    输出“a1”

    而且这种情况就从左到右,依次看“+”号前后有没有字符串出现就行了。



  • 相关阅读:
    [恢]hdu 1412
    [恢]hdu 2212
    [恢]hdu 1407
    [恢]hdu 1228
    [恢]hdu 1337
    [恢]hdu 1014
    [恢]hdu 2200
    定居到博客园了!
    比较GridView,DataList,Repeator ,DetailsView,FormView
    随手记录修改某条记录时,不使用数据库控件而用datareader
  • 原文地址:https://www.cnblogs.com/pursuit1996/p/5209472.html
Copyright © 2011-2022 走看看