文档编写

ReadMe更改
This commit is contained in:
userA
2023-08-31 18:25:32 +08:00
parent c1010a5fb1
commit 976f016144
43 changed files with 542 additions and 249 deletions

View File

@@ -10,7 +10,7 @@ module.exports = {
searchMaxSuggestions: 10,
lastUpdated: "上次更新",
docsRepo: "/twj666/Chopper-Doc",
docsRepo: "/969025903/Chopper-Doc",
docsDir: "docs",
docsBranch: "master",
editLinks: true,

View File

@@ -213,3 +213,21 @@ InitPluginRegister.getPlugin插件名);
//注册插件
InitPluginRegister.register(CommonInitMachine);
```
### 其他用法
#### CheckAndDo
::: tip PluginCheckAndDo
有的插件可能在某些插件启动时有不同的功能为了检测目标插件是否存在并根据存在情况使用不同的方法你可以使用PluginCheckAndDo方法
:::
```java
PluginCheckAndDo.CheckAndDo(
(plugin)->{
//存在时执行的方法
},
()->{
//不存在时执行的方法
},
PluginName.CREEPER_MANAGER_PLUGIN
);
```

View File

@@ -0,0 +1,213 @@
---
title: 如何编写爬虫
date: 2023-07-31 02:05:34
permalink: /pages/63a89d/
---
[[toc]]
## ChopperBot与爬虫
::: tip 简介
如果说插件构成了ChopperBot这颗独特的星球那么爬虫得到数据则是这颗星球的生命。没有生命的星球将是死气沉沉的而没有爬虫的ChopperBot也将失去它的光泽
再此向各位开发者介绍如何在ChopperBot中编写一个规范的爬虫并在融合进入ChopperBot中。
:::
如果你不知道什么是爬虫,或者如何编写,请参考下列文章:
- [java爬虫详解及简单实例](https://zhuanlan.zhihu.com/p/634122028)
- [爬虫框架WebMagic](https://webmagic.io/)
## 编写ChopperBot爬虫
### 创建文件夹
```
+-- ChopperBot
| +-- 模块名
| | +-- core
| | | +-- creeper
| | | | +-- loadconfig //爬虫参数文件
| | | | +-- loadtask //爬虫主体任务
| | | | +-- processor //后续任务处理
| +-- 模块名
```
在开始编写爬虫脚本前请先确保你的模块下的core文件夹中有如上图的几个文件夹如果已经拥有则可以开始进行爬虫脚本的编写了
### 创建LoadConfig
::: tip 说明
LoadConfig是当前你要进行爬虫时使用的爬虫参数文件它可以包含urlheadercookie等等信息**也是爬虫脚本启动的必备文件**
:::
1. 创建一个LoadConfig文件包含你爬虫需要的必备信息
2. 添加@Creeper注解将脚本文件交给CreeperCenter管理
```java
@Creeper(creeperName = "豆瓣书籍top250",loadTask = DouBanLoadTask.class,creeperDescription = "爬豆瓣爬的")
public class DouBanLoadConfig extends LoadConfig {
public DouBanLoadConfig() {
this.url = "https://book.douban.com/top250"; //爬虫url
//this.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36";
//this.Origin = "https://live.bilibili.com";
//this.Referer = "https://live.bilibili.com/";
}
}
```
LoadConfig的其他参数
```java
String url;
String startTime;
String UserAgent;
String Origin;
String Referer;
Map<String,String> header; //头信息
Map<String,String> cookie; //Cookie
```
如果你需要更多参数可以继承LoadConfig自行添加例如下面代码
```java
public abstract class LoadVideoConfig extends LoadConfig {
protected String videoPath;
// 视频保存名称
protected String videoName;
protected int clarity;
public LoadVideoConfig(String videoPath, String videoName) {
this.videoPath = videoPath;
this.videoName = videoName;
}
}
```
### 创建LoadTask
::: tip 说明
LoadTask就是整个爬虫文件运行的核心他负责读取LoadConfig中的数据并进行爬虫启动**是爬虫脚本启动的必备文件**
在ChopperBot也提供了多种LoadTask类型的编写目前结合了WebMagic框架之后会结合更多爬虫框架。
:::
编写一个最简单的脚本
```java
/**
* 网上随便找的个爬豆瓣的demo需要导入jsoup不清楚能不能运行
* 链接https://www.w3cschool.cn/article/69979497.html
*/
public class DouBanLoadTask extends CommonLoadTask<ArrayList<Book>> {
public DouBanLoadTask(DouyuBanLoadConfig loadConfig) {
super(loadConfig);
}
@Override
public ArrayList<Book> start() {
try {
// 连接到URL并获取网页的文档对象
Document doc = Jsoup.connect(loadConfig.getUrl()).get();
// 选择所有包含书籍信息的元素
Elements elements = doc.select("div.article > div.indent > table");
// 遍历每个元素
for (Element element : elements) {
// 提取书籍的标题
String title = element.select("div.pl2 > a").attr("title");
// 提取书籍的作者
String author = element.select("p.pl").text().split("/")[0];
// 提取书籍的评分
String rating = element.select("span.rating_nums").text();
// 提取书籍的简介
String summary = element.select("span.inq").text();
// 创建一个Book对象
Book book = new Book(title, author, rating, summary);
// 将Book对象添加到列表中
books.add(book);
}
} catch (IOException e) {
e.printStackTrace();
}
return books;
}
@Override
public void end() {
}
class Book{
private String title; // 标题
private String author; // 作者
private String rating; // 评分
private String summary; // 简介
// 书籍的构造方法
public Book(String title, String author, String rating, String summary) {
this.title = title;
this.author = author;
this.rating = rating;
this.summary = summary;
}
}
}
```
#### 其他的LoadTask
- **CommonLoadTask**:
无特殊需求无框架的LoadTask适用于编写所有类型的爬虫脚本
- **WebMagicLoadTask**:
基于WebMagic框架开发的LoadTask适用于快速开发多线程深度广度等多种爬虫策略的LoadTask
> 1. 创建Spider
> ```SpiderFactory.buildSpider(平台名称,Processor,url)```
> 2. 获取最终结果
> ```Object obj = getData(spider,url)```
> ```java
> @Override
> public List<DouyuLive> start(){
>
> List<DouyuLive> lives;
>
> Spider spider = SpiderFactory.buildSpider(ConstPool.PLATFORM.DOUYU.getName(), //平台名称
> douyuHotLiveProcessor, //processor
> loadConfig.getUrl()); //url
> try {
> lives = getData(spider,loadConfig.getUrl());
> }catch (Exception e){
> fail(e);
> return null;
> }
> success();
> return lives;
> }
> ```
- ~~AsyncLoadTask不完善不推荐使用~~:
异步的LoadTask用于异步运行的爬虫脚本得到的结果需要提供给result
**至此你的爬虫脚本就编写完毕了无需额外的学习你可以当作写一个算法OR一个面向过程的程序总之想要编写一个爬虫脚本很简单。除了创建几个必要的文件外和一行注释外你只需要写下你的脚本代码即可**
## 爬虫运行中心
::: tip 说明
如果你已经完成一个可以单独运行的爬虫脚本。你可以将你写好的爬虫脚本放入[TaskCenter](/pages/691628/)中来进行爬虫脚本的运行管理,监控,调度,以及本地存储,失败恢复等功能。
:::
```java
CommonPlugin plugin = InitPluginRegister.getPlugin(PluginName.TASK_CENTER_PLUGIN); //获取TaskCenter插件
ReptileRequest request = new ReptileRequest(new DouyuHotModuleConfig(), //需要调度爬虫方法的参数文件
(t)->{System.out.println("return val:"+t)} //爬虫任务完成后的callback方法
)
((TaskCenter)plugin).request(request);
```
以上代码分为以下几点:
1. `TaskCenter`插件已经启动,并获取
2. 构建`ReptileRequest`
3. 放入需要爬虫方法的文件,文件要确保有对应的`LoadTask`
4. 编写`CallBack`方法,这个是在`LoadTask`调用结束并返回值时执行的t为返回的值你可以自行处理返回的值
5. 发送爬虫请求给`TaskCenter`运行
## 爬虫脚本库
当你需要跨模块调用或者快捷使用爬虫脚本时,你可以在`CreeperManger`插件中查找你已经注解`@Creeper`的爬虫脚本
```java
CreeperManager manager = InitPluginRegister.getPlugin(PluginName.CREEPER_MANAGER_PLUGIN); //获取CreeperManager插件
//根据名字获取爬虫脚本
LoadTask task1 = manager.getLoadTask("豆瓣脚本")
//根据爬虫请求中的LoadConfig获得爬虫脚本
LoadTask task2 = manager.getLoadTask(ReptileRequest)
```

View File

@@ -1,5 +0,0 @@
---
title: 爬虫脚本编写
date: 2023-07-31 02:05:34
permalink: /pages/63a89d/
---

View File

@@ -43,6 +43,7 @@ postList: none
[twj666🤡](https://github.com/tmlgenius)
[welsir🤡](https://github.com/tmlgenius)
[masteryf🤡](https://github.com/masteryf)
[Klein422🤡](https://github.com/Klein422)
### TML生态圈
@@ -59,7 +60,7 @@ postList: none
欢迎各路好汉一起来参与完善 ChopperBot我们期待你的 PR
- 贡献代码:代码地址 [ChopperBot](https://github.com/969025903/ChopperBot) ,欢迎提交 Issue 或者 Pull Requests
- 维护文档:文档地址 [ChopperBot-Doc](https://github.com/twj666/Chopper-Doc) ,欢迎参与翻译和修订
- 维护文档:文档地址 [ChopperBot-Doc](https://github.com/969025903/ChopperBot-Doc/) ,欢迎参与翻译和修订
### 友情链接