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)!