使用webmagic,爬虫CSDN个人博客中详情页的内容,并保存到本地
时间: 2024-05-14 12:12:19 浏览: 14
以下是一个示例代码,可以爬取CSDN个人博客中最新的10篇文章的标题、发布时间、正文内容,并保存到本地文件中。
```java
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
public class CSDNBlogProcessor implements PageProcessor {
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
@Override
public Site getSite() {
return site;
}
@Override
public void process(Page page) {
Document document = page.getHtml().getDocument();
Elements titleElements = document.select(".title-article");
String title = titleElements.first().text();
String date = titleElements.last().text();
String content = document.select("#article_content").html();
page.putField("title", title);
page.putField("date", date);
page.putField("content", content);
}
public static void main(String[] args) throws IOException {
Spider spider = Spider.create(new CSDNBlogProcessor())
.addUrl("https://blog.csdn.net/username/article/list")
.addPipeline(new FilePipeline("D:/csdn_blog"))
.thread(5);
spider.run();
}
public static class FilePipeline implements Pipeline {
private String path;
public FilePipeline(String path) {
this.path = path;
}
@Override
public void process(ResultItems resultItems, Task task) {
String title = resultItems.get("title");
String date = resultItems.get("date");
String content = resultItems.get("content");
String fileName = title + ".html";
try (FileWriter writer = new FileWriter(path + "/" + fileName)) {
writer.write("<html><head><title>" + title + "</title><meta charset=\"utf-8\"></head><body>");
writer.write("<h1>" + title + "</h1>");
writer.write("<p>" + date + "</p>");
writer.write(content);
writer.write("</body></html>");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
说明:
- 在`process`方法中,首先使用Jsoup选择器获取标题、日期、正文内容,并将其保存到`ResultItems`对象中。
- 然后,在`main`方法中,使用`Spider`对象构建爬虫,设置起始URL、线程数、结果处理器(本示例中使用自定义的`FilePipeline`),并启动爬虫。
- 在自定义的`FilePipeline`中,从`ResultItems`对象中获取文章的标题、日期、正文内容,并将其写入到本地文件中。在写入HTML文件时,需要手动添加HTML标签,保证正文内容可以正常显示。
注意:
- 在示例代码中,需要将`username`替换为实际的CSDN用户名。
- 需要将`D:/csdn_blog`替换为实际的保存路径。