使用java语言从指定网址中爬取文件到本地数据库

作者:陈世佳  编写时间:2018-4-15

方法如下:

    步骤一:建立java项目,导mysql-connector-java-5.1.26-bin.jar包,如果没有改jar包,可点击jar包下载,密码nsd6。

    步骤二:在数据库建立url表结构如下:

CREATE TABLE `url` (
  `url_id` varchar(500) NOT NULL,
  `url` varchar(500) DEFAULT NULL,
  `effective` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`url_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    步骤三:创建Reptile类,编写java代码,并更改jdbc()函数下的本地数据库链接,用户名及密码。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.sql.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Reptile {

    static Statement statement;
    static Connection conn;

    public static void main(String[] args) throws Exception {
        //目标URL
        URL url = new URL("http://www.sj33.cn/");
        //访问编码
        String enCoded = "utf-8";
        //设置链接的正则表达式
        String st = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
        //获取当地时间产生编号
        long str = Calendar.getInstance().getTimeInMillis();
        //定义一个本类的对象
        Reptile reptile = new Reptile();
        try {
            //使用getStringByWeb(url,enCoded,st)获取url中的链接的集合
            List<String> list = getStringByWeb(url,enCoded,st);
            System.out.println("\n<##资源搜集完成##>\n正在储存资源...");
            System.out.println("资源数:"+list.size());
            //调用jdbc()与数据库建立连接
            reptile.jdbc();
            for(String Url:list){
                str++;
                String url_id = String.valueOf(str);
                System.out.println("url_id:"+url_id);
                System.out.println("url:"+Url);
                //调用insertVdieo1()储存信息
                reptile.insertVdieo1(url_id,Url);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static List<String> getStringByWeb(URL url,String enCoded,String str) throws IOException {
        //从目标url中获取字符流到bufr
        BufferedReader bufr = new BufferedReader(new InputStreamReader(url.openStream(),enCoded));
        List<String> list = new ArrayList<String>();
        Pattern p = Pattern.compile(str);
        String line = null;
        while((line=bufr.readLine())!=null){
            System.out.println(line);
            Matcher m = p.matcher(line);
            //寻找文件链接
            while(m.find()){
                //将符合规则的数据存储到集合中。
                list.add(m.group());
            }
        }
        return list;
    }

    protected void  jdbc(){
        String url3 = "jdbc:mysql://localhost:3306/lc?useUnicode=true&characterEncoding=UTF8";
        String username="root";
        String password="root";
        try{
            Class.forName("com.mysql.jdbc.Driver"); //加载驱动程序
            System.out.println("加载数据库驱动成功!");
            conn = DriverManager.getConnection(url3, username ,password);
            System.out.println("请求链接数据库成功!");
            statement = conn.createStatement(); // statement用来执行SQL语句
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void insertVdieo1(String url_id,String url){//向数据库插入信息
        StringBuilder sqlstr = new StringBuilder("insert into url values");
        sqlstr.append("('");
        sqlstr.append(url_id);
        sqlstr.append("','");
        sqlstr.append(url);
        sqlstr.append("','1");
        sqlstr.append("');");
        //产生一个order数据库插入命令
        String order = sqlstr.toString();
        try {
            //执行命令
            statement.executeUpdate(order);
            System.out.println("Successfully "+order+ '\n');
        } catch (Exception e) {
            System.out.println("unsuccessfully "+order+"\n");
            e.printStackTrace();
        }
    }

}


     步骤四:运行即可

发布了20 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/csj41352/article/details/79947103