当前位置: 首页 > 工具软件 > crawler-java > 使用案例 >

[转载] java简易爬虫Crawler

穆鸿卓
2023-12-01

参考链接: Java|如何开始学习Java

小型简易爬虫源码(java版)

 

 

  

 

 

  

 

 

  

 

 

 一,介绍: 

 

 

         

    >这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。        >而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。        >不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用。

 

 

  

 

 

 二,代码:

 

 

  

 

 

 Start_Crawler类:

 

 

 

 package com.xhs.crawler;

 

import java.util.Scanner;

 

/**

 * @author XHS_12302

 * @version  1.0

 * @date  2017_07_11

 * 

 * 

 * @description 这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。

 *              而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。

 *              不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用

 */

public class Start_Crawler {

    public static void main(String[] args) {

        System.out.println("请输入网址:");

        

        //获取用户要爬取的网址

        Scanner in=new Scanner(System.in);

        String url=in.next();

        

        //通过用户的输入建立一个Get_Html的一个g对象

        Get_Html g=new Get_Html(url);

        //调用g中的get()方法模拟请求网站服务器,返回回应的字符串

        String htmlstr=g.get();

        

        //建立一个Html_analyze对象ha用来分析服务器返回来的字符串

        Html_analyze ha=new Html_analyze(htmlstr);

        

        /*for (String href :ha.analyzeHtmlHref()) {

            System.out.println(href);

        }*/

        

        //调用ha.analyzeHtmlImage()方法将分析出来的图片地址放进list里面,传回来一个图片地址集合,

        //然后新建下载。

        new Download_pic().Download(ha.analyzeHtmlImage());

        

        System.out.println("program has done!");

        in.close();

    }

}

 

  Get_Html类:

  

 

 

 

 package com.xhs.crawler;

 

import java.io.BufferedReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLConnection;

 

public class Get_Html {

    private String url_path;

    private String htmlstr;

    StringBuffer contentBuffer = new StringBuffer();

    Get_Html(String url){

        this.url_path=url;

    }

 

    public String get(){

           FileWriter fw=null;

        try {

            fw=new FileWriter("C:\\Users\\Administrator\\Desktop\\crawler.txt");

            URL url=new URL(url_path);

            URLConnection hc=url.openConnection();

            hc.setConnectTimeout(5000);

            hc.setDoInput(true);

            ((HttpURLConnection) hc).setRequestMethod("GET");

            int returnCode=((HttpURLConnection) hc).getResponseCode();

            if(returnCode==200){

                InputStream input=hc.getInputStream();

                

                 InputStreamReader istreamReader = new InputStreamReader(input, "utf-8");  

                 BufferedReader buffStr = new BufferedReader(istreamReader);  

          

                String str = null;  

               while ((str = buffStr.readLine()) != null) 

                  contentBuffer.append(str);

                  htmlstr=contentBuffer.toString();

                  fw.write(htmlstr);

               input.close();

               istreamReader.close();

               buffStr.close();

               fw.close();

            }

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return htmlstr;

        

    }

    

    

}

 

  Html_analyze类:

 

 

 

 package com.xhs.crawler;

 

 

import java.util.ArrayList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

public class Html_analyze {

    private String src;

    Html_analyze(String src){

        this.src=src;

    }

    public List<String> analyzeHtmlImage(){

        String regex="http[s]{0,1}://[^\\s]*\\.(jpg|bmp|png)";

        //String sr="http://img5.imgtn.bdimg.com/it/u=1380084653,2448555822&fm=26&gp=0.jpg";

        List<String> listImgUrl=new ArrayList<>();

        Pattern p=Pattern.compile(regex);

        Matcher m=p.matcher(src);

        while(m.find()){

            System.out.println(m.group());

            listImgUrl.add(m.group());

        }

        System.out.println("\n\n总共找到记录:"+listImgUrl.size()+"\n");

        return listImgUrl;

    }

    public List<String>  analyzeHtmlHref(){

        //分析href标签   并且加入listHref

        String regex="<a.*?href=\"(.*?)\">";

        List<String> listHref=new ArrayList<>();

        Pattern p=Pattern.compile(regex);

        Matcher m=p.matcher(src);

        while(m.find()){

            listHref.add(m.group());

        }

        return listHref;

    }

}

 

  

 Download_pic类:

  

 

 

 

 package com.xhs.crawler;

 

import java.io.File;

 

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

 

import java.util.List;

 

public class Download_pic {

    public void Download(List<String> listImgSrc) {

        int count = 1;

        for (String url_path : listImgSrc) {

            InputStream in = null;

            FileOutputStream fo = null;

            String imageName = url_path.substring(

                    url_path.lastIndexOf("/") + 1, url_path.length());

            try {

                byte[] data = new byte[500];// 1024

                File f = new File(

                        "C:\\Users\\Administrator\\Desktop\\crawler\\");

                if (!f.exists()) {

                    f.mkdir();

                }

                fo = new FileOutputStream(new File(f.getAbsolutePath() + "\\"

                        + imageName));

                URL url = new URL(url_path);

                HttpURLConnection con = (HttpURLConnection) url

                        .openConnection();

                con.setConnectTimeout(5000);

                con.setDoInput(true);

                con.setRequestMethod("GET");

                // con.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

                // 设置代理

                int numCode = con.getResponseCode();

                in = con.getInputStream();// int length

                int lengthZ = 0;

                if (numCode == 200) {

                    while ((lengthZ = in.read(data)) != -1) {

                        fo.write(data, 0, lengthZ); // write(data,0,length);

                        fo.flush();

                    }

                    System.out.println("下载成功:\t" + imageName + "\t剩余:\t"

                            + (listImgSrc.size() - count));

                } else {

                    System.out.println("访问失败,返回码不是200");

                }

 

            } catch (Exception e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

                System.out.println(imageName + "下载失败");

            } finally {

                try {

                    if (in != null)

                        in.close();

                    if (fo != null)

                        fo.close();

                    count++;

                } catch (IOException e) {

                    // TODO Auto-generated catch block

                    // e.printStackTrace();

                    System.out.println("关闭流出现点问题··");

                }

            }

 

        }

    }

 

}

 

  

 三:截图

 

 

  

 

 

  

 

 

  

 

 

  

 

 

 这个只是简易的小东西,不过感觉挺好玩的。        感兴趣的朋友可以自己试试,如果不能满足你要求,                这儿给你提供一种想法,你可以利用这种特性爬                       取csdn博客文章访问量。^_^

  

 

 

  

 

 

  

 

 

 联系邮箱:xhsgg12302@outlook.com 

 

 

  

 

 

                                                                                                                                                                                                                                                                                                                                                                

 2017_07_11

 类似资料: