Java语言自写初级爬虫一

学了好久的JAVA,C,……语言,可是不会用,东西我们也知道,这就要求我们要多看别人代码,参考,学习,模仿,创新。这是一个初级的爬虫程序,有待改进……

package com.ftx.html;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import org.jsoup.Jsoup;
import org.jsoup.helper.HttpConnection;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * use java develop pa chong
 * 
 * @author FTX
 * @version v1.0
 */

public class HtmlJsoup {
    static URL urlObj = null;
    static URLConnection uc = null;
    static InputStreamReader in = null;

    public static void main(String[] args) {

        // 根据网址和页面编码集,获取网页源码
        String html = getHtmlResourceByURL("http://www.baidu.com/",
                "utf-8");
        // System.out.println(html);
        // 解析源代码
        Document document = Jsoup.parse(html);
        // 获取网页图片
        Elements elements = document.getElementsByTag("img");
        for (Element element : elements) {
            String imgSrc = element.attr("src");
            System.out.println("正在下载的图片地址" + imgSrc);
            downImages(imgSrc,"E:\\JavaScript");
            System.out.println("download success");
        }
        // 解析我们需要下载的内容部分

    }

    /**
     * 根据一个图片的URL地址,通过这个URL批量下载图片
     * 
     * @author FTX
     * @param imgURL
     *            要下载的图片服务器地址
     * @param imgesURL
     *            保存路径
     * @return 无
     */
    public static void downImages(String imgURL, String filePath) {
        String fileName = imgURL.substring(imgURL.lastIndexOf("/"));
        try {
            File files = new File(filePath);
            if (files.exists()) {
                files.mkdirs();
            }
            // 获取下载地址文件

            urlObj = new URL(imgURL);
            //获取网络图片地址
            HttpURLConnection uc=(HttpURLConnection)urlObj.openConnection();
            //获取连接的输出流
            InputStream is=uc.getInputStream();
            //创建文件
            File file=new File(filePath+fileName);

            //创建输出流,写入文件

            FileOutputStream out=new FileOutputStream(file);
            int i=0;
            while ((i=is.read())!=-1){
                out.write(i);;
            }

            is.close();
            out.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /**
     * 根据网址和页面编码集,获取网页源码
     * 
     * @author FTX
     * @param url
     * @param encoding
     * @return String 网页源码
     */
    public static String getHtmlResourceByURL(String url, String encoding) {

        // webpage storage
        StringBuffer source = new StringBuffer();
        try {
            // 获取网络连接
            urlObj = new URL(url);
            // 打开网连接
            uc = urlObj.openConnection();
            // 建立网络的输入流
            in = new InputStreamReader(uc.getInputStream(), encoding);
            // 缓冲写入的文件流
            BufferedReader reader = new BufferedReader(in);
            // 循环读取
            String tempLine = null;
            while ((tempLine = reader.readLine()) != null) {
                source.append(tempLine + "\n");

            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("net connection timeOut …………");
        } finally {
            if (in != null)
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }

        return source.toString();
    }

}

代码中的解释已经很详细了,不再多说。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值