自学内容网 自学内容网

IO练习网络爬虫获取

题目:

具体文字内容如下:

练习:制造假数据

需求:制造假数据是开发中的一项重要能力,从各个网站爬取数据是其中的一种方法。

获取姓氏示例及链接:
赵钱孙李 周吴郑王
链接:百家姓_诗词_百度汉语

男生名字示例及链接:
子轩 浩宇 浩然 博文 宇轩 子涵 南淳 皓轩 梓轩
链接:男生有诗意的名字推荐(龙年男孩起名)

女生名字示例及链接:
子涵 怡萱 梓涵 晨曦 紫涵 诗涵 梦琪 慧怡 子萱 雨涵
链接:2024年清新有诗意女孩名字取名(龙年女孩名字)

获取它们的信息组成姓名+性别+年龄

代码 :

先通过方法获取链接里的信息:

先new一个StringBuilder类,再new一个URL类,通过URL里的方法获取链接里的数据,因为是字节流所以要使用转换流转换成字符流,再把里面的数据装入StringBuilder里,使用StringBuilder.append方法,再释放资源

public static String name(String str) throws IOException {
        //用来打印类
        StringBuilder builder = new StringBuilder();
        //创建URL对象
        URL url = new URL(str);
        //链接网站
        URLConnection urlConnection = url.openConnection();
        //读取里面的数据
        InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream());
        int len;
        while ((len=inputStreamReader.read())!=-1){
            builder.append((char) len);
        }
        inputStreamReader.close();
        return builder.toString();
    }

 我们再通过正则表达式来自定规则 先new一个数组 再通过Pattern.compile(str)自定规则,把这个规则放在网络中的数据中compile.matcher(name);再通过while循环判断判断符合规则matcher.find()

,符合打印到数组中list.add(matcher.group(a));

 private static ArrayList<String> getData(String name, String str,int a) {
        ArrayList<String> list = new ArrayList<>();
        //以str为规则
        Pattern compile = Pattern.compile(str);
        //套用规则
        Matcher matcher = compile.matcher(name);
        while (matcher.find()){
            list.add(matcher.group(a));
        }
        return list;
    }
姓氏:
 ArrayList<String> list = getData(name, "([\\u4E00-\\u9FA5]{4})(,|。)", 1);
男生名:
ArrayList<String> list2 = getData(name1, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);

女生名:

ArrayList<String> list3 = getData(name2, "(.. ){4}..", 0);

把它们的数据装入各自的数组中

通过这些数据来做题

随机男女生人数 ,不重复,随机姓名,随机年龄

请看代码:

 private static ArrayList<String> GetInFos(ArrayList<String> surname,ArrayList<String> boy,ArrayList<String> girl,int Count,int count){
        //随机男生
        HashSet<String> strings = new HashSet<>();
        while (true){
            if (strings.size()==Count){
                break;
            }
            Collections.shuffle(surname);
            Collections.shuffle(boy);
            strings.add(surname.get(0)+boy.get(0));
        }
        HashSet<String> strings1 = new HashSet<>();
        while (true){
            if (strings1.size()==count){
                break;
            }
            Collections.shuffle(surname);
            Collections.shuffle(girl);
            strings1.add(surname.get(0)+girl.get(0));
        }
        ArrayList<String> list = new ArrayList<>();
        Random random = new Random();
        //男生
        for (String string : strings) {
            int i1 = random.nextInt(10) + 18;
            list.add(string+"-男-"+i1);
        }
        //女生
        for (String string : strings1) {
            int i1 = random.nextInt(8) + 18;
            list.add(string+"-女-"+i1);
        }
        return list;
    }

最后统统放入一个数组中。

全部代码:

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo1 {
    public static void main(String[] args) throws IOException {
        String a = "https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0";
        String b = "http://www.haoming8.cn/baobao/10881.html";
        String c = "http://www.haoming8.cn/baobao/7641.html";
        String name = name(a);
        String name1 = name(b);
        String name2 = name(c);
        //中文[\u4E00-\u9FA5]
        //姓氏
        ArrayList<String> surname = new ArrayList<>();
        ArrayList<String> list = getData(name, "([\\u4E00-\\u9FA5]{4})(,|。)", 1);
        for (String s : list) {
            for (int i1 = 0; i1 < s.length(); i1++) {
                char at = s.charAt(i1);
                surname.add(at+"");
            }
        }
        //去重复
        //男生
        ArrayList<String> list5 = new ArrayList<>();
        ArrayList<String> list2 = getData(name1, "([\\u4E00-\\u9FA5]{2})(、|。)", 1);
        for (String s : list2) {
            if (!list5.contains(s)){
                list5.add(s);
            }
        }
        //女生
        ArrayList<String> list4 = new ArrayList<>();
        ArrayList<String> list3 = getData(name2, "(.. ){4}..", 0);
        for (String s : list3) {
            //以空格为分隔符
            String[] split = s.split(" ");
            for (String string : split) {
                list4.add(string);
            }
        }
        ArrayList<String> list1 = GetInFos(surname, list5, list4, 20, 20);
        for (int i1 = 0; i1 < list1.size(); i1++) {
            String s = list1.get(i1);
            System.out.println(s);
        }
    }
    private static ArrayList<String> GetInFos(ArrayList<String> surname,ArrayList<String> boy,ArrayList<String> girl,int Count,int count){
        //随机男生
        HashSet<String> strings = new HashSet<>();
        while (true){
            if (strings.size()==Count){
                break;
            }
            Collections.shuffle(surname);
            Collections.shuffle(boy);
            strings.add(surname.get(0)+boy.get(0));
        }
        HashSet<String> strings1 = new HashSet<>();
        while (true){
            if (strings1.size()==count){
                break;
            }
            Collections.shuffle(surname);
            Collections.shuffle(girl);
            strings1.add(surname.get(0)+girl.get(0));
        }
        ArrayList<String> list = new ArrayList<>();
        Random random = new Random();
        //男生
        for (String string : strings) {
            int i1 = random.nextInt(10) + 18;
            list.add(string+"-男-"+i1);
        }
        //女生
        for (String string : strings1) {
            int i1 = random.nextInt(8) + 18;
            list.add(string+"-女-"+i1);
        }
        return list;
    }
//以正则表达式来制定规则
    private static ArrayList<String> getData(String name, String str,int a) {
        ArrayList<String> list = new ArrayList<>();
        //以str为规则
        Pattern compile = Pattern.compile(str);
        //套用规则
        Matcher matcher = compile.matcher(name);
        while (matcher.find()){
            list.add(matcher.group(a));
        }
        return list;
    }
    //获取网站内容信息
    public static String name(String str) throws IOException {
        //用来打印类
        StringBuilder builder = new StringBuilder();
        //创建URL对象
        URL url = new URL(str);
        //链接网站
        URLConnection urlConnection = url.openConnection();
        //读取里面的数据
        InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream());
        int len;
        while ((len=inputStreamReader.read())!=-1){
            builder.append((char) len);
        }
        inputStreamReader.close();
        return builder.toString();
    }
}

每日名言: 太阳每一天都是新的,生命每一天都是美的。


原文地址:https://blog.csdn.net/2301_80329236/article/details/140282228

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!