前言
在日常中,我们经常需要浏览网页,阅读一些内容。
但网页中并不是所有内容都是我们所需要的。
毕竟,谁都不想看的好好时突然出现一个“澳门棋牌”。
那么这时我们就可以爬取它的内容。
明确爬取对象
这里就以大家熟知的 笔*阁为例。
打开笔*阁的首页。
不对,打开一本小说。
这里以《进化的四十六亿重奏》为例(我是挺推荐这本书的,还有,如果可以的话尽量支持正版。)
打开主页,查看源代码,我们可以从其中换取我们需要的一起。
那我们需要什么呢?
那我们就需要明确我们爬取的对象。
1 小说的名称。
2 章节名称。
3 章节内容。
ok,明确了对象后,那我们就需要针对这些对象进行爬取。
实现需求
小说名称
首先是小说的名称。
通过观察源代码,我们可以看到:
小说的名称和简介是储存在:
11,12行的标签中的。
章节内容
小说的目录 和 章节内容是储存在:
标签中的。
我们可以将网页的内容全部存入一个字符串数组中。
然后进行比较,确定位置。
然后将我们需要的内容提取出来。
在放入新的文件中。
话不多说,上实例:
源代码
public static void main(String[] args){
//确定主页链接
String link = "https://www.biquwx.la/0_376/";
//确定文件存放位置
String path = "/Users/apple/Downloads/test/";
//默认运行一次,当连接不上链接时(也就是出现SSLException异常时),runTime会+1,也就是仔运行一次
int runTimes = 1;
for (int runtime=0;runtime<runTimes;runtime++){
try{
//新建URL对象
URL url = new URL(link);
//打开连接
URLConnection urlConnection = url.openConnection();
//建立Http的连接
HttpsURLConnection connection = (HttpsURLConnection) urlConnection;
//新建流
InputStreamReader isr = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
//现在网页中的内容已经读进了BufferedReader中。
System.out.println("连接成功!");
//新建一个容器,容器的长度会随内容的增加而增加,不用担心数组越界的问题
ArrayList al = new ArrayList();
//while循环,一直执行直到,line == null时停止,也就是网页内容读完后停止。
while (true){
//新建字符串,用于储存一行的内容
String line = br.readLine();
//如果line == null ,则跳出循环
if (line == null){
break;
}
//如果line != null,那么把字符串添加进容器中。
else {
al.add(line);
}
}
//关闭流
br.close();
isr.close();
//while循环完毕后,网页中的内容也都被放进了容器中
//现在将容器中的内容放入一个字符串数组中
//字符串的长度就为容器的大小
String[] str = new String[al.size()];
for (int i=0;i<str.length;i++){
str[i] = String.valueOf(al.get(i));
}
//如果出现乱码,则重新运行
//其实,没多大用,我也不知道为什么会出现乱码。
//但一般等会在运行就好了
//如果有办法的,可以在评论中告诉我,谢谢。