Java爬虫实战:解析小说网站强推榜并下载小说内容
这是一个爬虫程序,用于爬取某小说网站的强推榜中的小说内容,并将其存储到本地文件中。程序的主要流程如下:
- 创建一个HttpClient实例,用于发送HTTP请求。
- 访问小说网站首页,获取网页内容。
- 解析推榜单,得到书籍标题和href。
- 遍历每一本书籍,进入书籍主页。
- 解析书籍主页中的'免费阅读'按钮,得到书籍第一章的URL。
- 根据强推榜中的书籍标题,通过IO流,为每一本小说创建文件名。
- 循环读取每一章节的内容,并使用IO流存储到对应的文件中。
具体实现细节可以参考代码注释。
public static void main(String[] args) throws IOException {
Document document = null;
String prefix = "https:";
//小说网站首页,url屏蔽,读者可自行选择
String url = "https://www.qidian.com/";
CloseableHttpClient httpClient = HttpClients.createDefault();
//访问小说网首页
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
String html = EntityUtils.toString(entity, "UTF-8");
document = Jsoup.parse(html);
//解析推榜单,得到书籍标题和href
Elements books = document.select(".wrap .index-two-wrap .book-list-wrap .book-list ul li strong a");
for (Element book : books) {
url = prefix + book.attr("href");
//进入书籍主页
httpGet = new HttpGet(url);
response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
entity = response.getEntity();
html = EntityUtils.toString(entity, "UTF-8");
document = Jsoup.parse(html);
//解析书籍主页中的'免费阅读'按钮,得到书籍第一章的URL
url =prefix+ document.select("#readBtn").attr("href");
//根据强推榜中的书籍标题,通过IO流,为每一本小说创建文件名
FileWriter fw = new FileWriter("d:/test/" + book.text() + ".txt");
//循环读取每一章节的内容,并使用IO流存储到对应的文件中
while (true) {
httpGet = new HttpGet(url);
response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
entity = response.getEntity();
//将内容转换成String
html = EntityUtils.toString(entity, "UTF-8");
document = Jsoup.parse(html);
Elements title = document.select("#j_chapterBox .text-wrap .main-text-wrap .text-head h3 .content-wrap");
Elements content = document.select("#j_chapterBox .text-wrap .main-text-wrap .read-content p");
Elements next = document.select("#j_chapterNext");
String href = next.attr("href");
url = prefix + href;
if (url.equals("https:")) {
break;
}
fw.write(title.text() + "\r\n");
for (Element e : content) {
fw.write(e.text() + "\r\n");
}
}
}
fw.close();
}
}
}
}```
原文地址: https://www.cveoy.top/t/topic/ojOC 著作权归作者所有。请勿转载和采集!