使用Java爬取小说网站的小说
> 示例网址:http://www.qibookw.com/book/7/7132/
## 网页分析
- 通过审查元素发现所有的章节目录都在元素ID为:`chapterlist`的<ul>标签下面
!(http://ftp.25wz.cn/study/image-20211230123429400.png)
- 此时我们需要获取`<li>`标签是数量,然后循环遍历获取到每一章的的URL链接
- 打开获取到的URL链接发现每章的内容都是在`ID`为`novel_content`的`div`下面
!(http://ftp.25wz.cn/study/image-20211230123606759.png)
- 此时我们只需要获取到这个ID下面的text值就能获取到文章的内容
## 代码实现
### 依赖
```xml
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.15</version>
</dependency>
<dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
```
### Java代码
```java
/**
* @AuThor 无缺
* @ClassName test01
* @date 2021/12/30 9:57
* @Description TODO
*/
public class test01 {
public static void main(String[] args) {
//向这个篇小说所在的主页发送请求,并获取到HTML文档
String body = HttpRequest.get("http://www.qibookw.com/book/7/7132/").execute().body();
//使用jsoup解析得到的html
Documentparse = Jsoup.parse(body);
//使用select查询出所有的li标签
Elements li = parse.select("#chapterlist > li");
//根据li的数量循环遍历
for (int i = 1; i < li.size(); i++) {
//根据遍历的i值获取href标签中的url
String href = parse.select("#chapterlist > li:nth-child(" + i + ") > a").attr("href");
StaticLog.info("{}",href);
//获取每章的标题
String title = parse.select("#chapterlist > li:nth-child(" + i + ") > a").text();
//拼接URL
String url = "http://www.qibookw.com" + href;
StaticLog.info("url:{}",url);
//根据得到的URL发送get请求
String body1 = HttpRequest.get(url).execute().body();
//解析请求得到的HTML
Document parse1 = Jsoup.parse(body1);
//获取文章正文
String content = parse1.select("#novel_content").text();
StaticLog.info("当前爬取的文章标题是:{},内容是:{}",title,content);
//构建文章保存的路径
FileWriter fileWriter = new FileWriter("E:\\文档\\xs\\" + title + ".txt");
//写入文章的内容
fileWriter.write(content);
}
}
}
``` aojiancandao 发表于 2022-11-12 13:26
实验了一下,title包含特殊符号创建文件失败,IORuntimeException: IOException: 文件名、目录名或卷标语法 ...
如果包含有空格的话,可能就会出现这个问题 怎么说呢,写的还可以,我也写了一个类似的,但是现在小说源都被垄断了,盗版小说源都是错别字,看的特别闹心,以前还可以,现在不行了,下载下来也没法看。 有点东西 终于看到一个用java写的了 实验了一下,title包含特殊符号创建文件失败,IORuntimeException: IOException: 文件名、目录名或卷标语法不正确。 title需要处理一下。 wwccz 发表于 2022-11-19 09:40
爬取成功,什么网站都可以爬吗
这里只是提供一个思路 无缺i 发表于 2022-11-21 10:51
如果包含有空格的话,可能就会出现这个问题
我测试的时候是遇到包含 ?符号 ,测试的就是楼主发的这个小说链接 学习学习学习 原来如此
页:
[1]
2