这里我编写了两个类,一个是CatHttp,一个是测试代码用的类。 CatHttp主要是用来写调用方法的,简化测试代码的代码量。
这里那b站做例子,pc端网页,首先访问网页获取页面源代码

– 访问并获取网页源码
[Java] 纯文本查看 复制代码//CatHttp类
public String getHttpText(String Url) {
// TODO Auto-generated method stub
try {

// 获取url
url = new URL(Url);
// 下载资源
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36");
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String msg = null;
String urlString = "";
while (null != (msg = br.readLine())) {
urlString += msg + "\\n";
}
// System.out.println(urlString);
br.close();
return urlString;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}

获取这个class的内容,写个内容截取方法,截取方法我做了多个判断,以便使用。
还有一点就是用来索引的字符会在返回时去除,这么做的原因是因为我以前在一款编程软件使用的习惯,而substring方法+indexof方法索引的字符会去尾留头。这样在获取详细信息时可能会造成一些美观上的问题。()。

  • 截取方法

[Java] 纯文本查看 复制代码public String interception(String nr, String str1, String str2) {
// 传入数据, 截取内容,并返回截取结果
try {

String interception = null;
if (str2 == null) {
interception = nr.substring(nr.indexOf(str1));
return interception.replace(str1, "");

} else if (str1 == null) {
return interception = nr.substring(0, nr.indexOf(str2));
} else {
nr = nr.substring(nr.indexOf(str1));
interception = nr.substring(0, nr.indexOf(str2));
return interception.replace(str1, "");
}
} catch (StringIndexOutOfBoundsException e) {
// TODO: handle exception
System.err.println("超出数组或索引范围");
} catch (NullPointerException e) {
System.err.println("引用对象为空");
}
return null;

}

调用截取方法执行返回

内容获取成功,但是我需要获取的可不止一条内容,而是所有包含该class的标签的内容。

  • 列表添加和读取方法
  • [Java] 纯文本查看 复制代码 private LinkedList<String> list = null;
    public void setList(String str1, String str2) {
    // 传入一个数据,设置一个分割符并转化为列表形式
    list = new LinkedList<String>();
    String[] temp = str1.split(str2); // 分割字符串
    for (int i = 0; i < temp.length; i++) {
    list.add(temp[i]);
    }
    }

    public LinkedList<String> getList() {
    return list;
    }

  • 测试代码类

[Java] 纯文本查看 复制代码 for (String cat : h.getList()) {
System.out.println(cat);
System.out.println("———————–");

}

写完这些方法之后该就该传入数据了,根据网页的class获取标签并获取标签内的内容,还要传入一个字符串作为数组的分隔符。

– 通过class获取标签内容完整代码

[Java] 纯文本查看 复制代码public void getLabcont(String nr, String Class) {
// 获取class内容方法
String cont = null;
String n = "";
String lab = null;
boolean is = false;
this.setList(nr, "<");
for (String cat : this.getList()) {
// System.out.println(cat);
if (is == false) {
if (cat.indexOf(Class) > -1) {
cat = "<" + cat;
cont = this.interception(cat, "<", Class);
cont = this.interception(cont, null, " ");
// lab = "</" + cont + ">";
n = n + cat;
is = true;
} else {
is = false;
}
} else if (is == true) {
if (cat.indexOf(cont) > -1) {
lab = "</" + cont + ">";
n = n + cat + lab;
cont = this.interception(nr, cont, "\\">");
is = false;
} else {
n = n + cat;
// System.out.println(n);

}
}
}
// System.out.println(n);
this.setList(n, lab);

}
}

代码解释一下,因为在前面说过传入的截取用的字符串会被去除,所以我这里做了补全,顺便再在补全的基础上加上了用来作为分隔符的字符串^_<

代码执行结果如下

都已经做到这一步了,再再表演一下截取方法的用法

– 让输出人内容更漂亮点
[Java] 纯文本查看 复制代码for (String cat : h.getList()) {
url = h.interception(cat, "a href=\\"//", "\\" target=\\"");
jpg = h.interception(cat, "img src=\\"//", "\\" alt=\\"");
zuo = h.interception(cat, " alt=\\"","\\">div class");
System.out.println("视频标题:"+zuo+"\\n视频封面:"+jpg+"\\n视频链接地址:"+url+"\\n\\n");

}

程序执行结果如图:

这样实现方法后差不多等同于一个简单得爬虫程序了,嘿嘿嘿。
csdn下载:完整代码下载
普通下载:

java简单爬虫.zip

(2.86 KB, 下载次数: 24)

原文地址:https://blog.csdn.net/qq_19883981/article/details/107603196

我应该不用给自己授权吧。

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源