您的位置:首页 > 游戏 > 手游 > IO练习网络爬虫获取

IO练习网络爬虫获取

2024/10/7 2:32:04 来源:https://blog.csdn.net/2301_80329236/article/details/140282228  浏览:    关键词: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();}
}

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com