zoukankan      html  css  js  c++  java
  • 网络爬虫入门系列(二)

     java中 抓取网页一共有5种方式 

        通过jdk自带的方法  有两种方式可以抓取网页,

      他们分别是。

         httpurlConnection 抓取网页, nio发送http请求 抓取网页 , 由于封装的不够好,抓取网页时代码较复杂,所以不常用

       Jsoup,   httpClient,   htmlunit 

       是目前较流行的,封装较完善的,可以用来抓取网页的 工具包. 

       此外还有htmlpaser等。 但是有点过时了。这里暂时只介绍这3种.

          首先 先使用  jdk自带的    httpurlConnection   类  抓取网页

           新建一个项目  Crawler

           新建一个包  org.apache.crawlerType

           新建一个类 urlConnection

          编写如下代码

    package org.apache.crawlerType;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    public class urlConnection {
        
        public static void main(String[] args) {
            HttpURLConnection conn = null;
            
            try {
            //构造一个连接
            conn = (HttpURLConnection) (new URL("http://www.cnblogs.com/szw-blog/p/8565944.html")).openConnection();      
                  conn.setConnectTimeout(3000); //设置建立连接的 超时时间  3秒。  
                  conn.setReadTimeout(3000);    //设置数据传输的超时时间 3秒。   注意两者的区分
                  //ConnectTimeout只有在网络正常的情况下才有效,而当网络不正常时,ReadTimeout才真正的起作用
                  //比如说。 用程序发起了一个url连接。 服务器正在传输数据给你。  突然断网了。
                  //如果不设置数据传输的超时时间。 则 该线程 会直接 阻塞住。 程序也不会往下执行 ,也不会报错
    //设置请求头,设置当前的  浏览器 是火狐   (反爬的服务器会读取请求头里面的信息。 如果不设置浏览器请求头的话。许多网站都会不返回信息);
                  //除此之外,还有做 Cookie 校验的  等
                  conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; MI 5 Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/11.8.8.968 Mobile Safari/537.36");
                   // 请求头详解 可以看  http://blog.csdn.net/alanlzz/article/details/72846718
            
                //网络状态码  为200  则为成功访问。  常见的 还有 404 , 500等.
                if(200 == conn.getResponseCode()){ 
                    
                    InputStream is =conn.getInputStream();   //获取页面的io流
                    
                    
                    StringBuffer sb=new StringBuffer();
                    
                    BufferedReader br = new BufferedReader(new InputStreamReader(is
                         ,"UTF-8"));    //以utf-8编码 解码
                    
                    String line = null;
                    
                    while ((line = br.readLine()) != null) {
                        sb.append(line+"
    ");
                    }
                    
                    System.out.println(sb.toString());
                }
                
                conn.disconnect();   //关闭该链接,相当于关闭当前页面,  养成随手关闭链接的良好的习惯很重要。
            
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            finally{
                conn.disconnect();   //关闭该链接,相当于关闭当前页面,  养成随手关闭链接的良好的习惯很重要。
            }
        }
    }

    运行后的结果为

    以上 是httpurlConnection 抓取网页 的简单方法

    下一章  介绍 jsoup 访问网页的java 实现

      

  • 相关阅读:
    函数,封装
    c++增强c
    Git安装与使用
    Ajax&Jquery
    IntelliJ Idea2018.2,Pycharm20183.2破解教程
    事务&数据库连接池&DBUtils&JSP设计模式
    JSP&EL&JSTL
    Http协议和Servlet
    接收流信息---字符串
    lucene索引库优化一
  • 原文地址:https://www.cnblogs.com/szw-blog/p/8566507.html
Copyright © 2011-2022 走看看