GentlemanSpider Save

基于colly,支持标签(xp)筛选和多线程加速的绅士漫画爬虫优雅实现

Project README

gentlemanSpider

License goreport

Get some Ero-Hons my friends!GKD!GKD!——Cheems

v 0.0.2 更新

增加了生产者协程的并发数量控制,修改推荐配置,解决部分配置较低电脑运行会卡死不下载的问题

PS:建议大家先爬取较为后面的页数,前面的页数访问者多往往会比较慢


用途:

  • 爬取并保存网站 绅士漫画 的本子/色图(大陆用户要求在梯子的环境下使用)
  • 支持按照配置进行多线程(协程)加速
  • 支持按照配置对个人喜好的xp标签进行过滤(可用标签在项目下的activeTags文件夹中可查看)

项目构建:

直接下载发布版本(推荐)

提供的版本类型:

OS ARCH
Linux x86/amd64/arm
Windows x86/amd64
Darwin(Mac) amd64

Release v0.0.2 页面下载压缩包解压后按后续说明编写配置,之后运行可执行文件即可。

直接构建(推荐)

go1.16以上的环境下,中文用户参考 Go下载 进行golang环境安装。

完成后执行如下操作运行爬虫程序:

git clone https://github.com/Youngkingman/gentlemanSpider.git
go mod download
go build
./gentlemanSpider

使用docker进行构建(不推荐)

要求系统装有docker,测试版本为20.10.17。首先创建容器相关的挂载目录:

cd /home && mkdir hondata

工作目录下克隆本仓库,在Dockerfile同级目录下运行:

git clone https://github.com/Youngkingman/gentlemanSpider.git
docker build -t gspider:latest .
docker run -d --name gspider -v /home/hondata:/goapp --network host gspider:latest

上述命令启动镜像并将内部项目的/goapp文件夹映射到宿主机/home/hondata文件夹与宿主机共享网络进行下载,还没有测试过翻墙条件下是否可用,该方法酌情使用。

使用go相关工具

在你自己的golang项目中使用go get -u github.com/Youngkingman/gentlemanSpider命令,只要导入包输入下面的代码就可以引用了:

import "github.com/Youngkingman/gentlemanSpider/honcrawler"
func main() {
	honcrawler.Coordinator.Start()
}

除此以外你还可以根据导出函数自己定制并发逻辑,具体参考实现部分。

项目配置使用说明:

项目需要在可执行文件所在同级文件夹下新建一个config.yaml文件,可以直接克隆本仓库进行使用,发布版本压缩包中自带该文件。

CrawlerSetting:
  PageStart: 2
  PageEnd: 10
  EnableProxy: true
  ProxyHost: http://127.0.0.1:62340
  TagConsumerCount: 2
  HonConsumerCount: 4
  HonBuffer: 32
  TagBuffer: 32
  EnableFilter: false
  WantedTags:
    - 百合
    - 女同士
  • PageStart: 最小为 1 爬虫开始页面,浏览 这里查看最大页数
  • PageEnd: 最小为 1, 必须大于等于 PageStart,爬虫结束页面,同上浏览 这里查看最大页数(截至写这句话是7104页)
  • EnableProxy: 是否使用代理(使用需要填写ProxyHost),大陆用户填true,海外用户填false
  • ProxyHost: 查看自己电脑的代理,需要带上端口
  • TagConsumerCount: 用于收集本子标签的配置,配置完成后会在可执行文件同级目录下创建包含所有标签(xp/作者/是否彩页汉化)信息的activeTag文件,会一定程度减慢本子的下载,不需要可以设置为0
  • HonConsumerCount:必须大于 0,根据程序运行电脑的配置进行设置
  • HonBuffer:必须大于 0,
  • TagBuffer:若设置了 TagConsumerCount则 必须大于 0
  • EnableFilter:是否使用标签过滤,true为使用,false会默认不过滤爬取所有本子
  • WantedTags: 你的标签集,需要EnableFiltertrue,每行以- {yourXP}的形式对标签进行选取,可以在activeTag文件中选取自己所需的标签,最终下载的本子至少会具有你给出的标签集中的一个标签(标签给的越少下载的本子一般会越少)

如何查看自己电脑的代理服务器端口(Win)

Linus用户请自行探索翻墙设置。对于windows用户,在你已经开启了梯子的情况下(既然你上了github那么大概率已经开了):

  1. 右键右下角工具栏网络图标,选择网络和Internet设置

  2. 左侧选择代理,查找端口地址,如下图则为http://127.0.0.1:62340

将你得到的对应地址填入config.yaml对应的ProxyHost配置即可。

并发数的选取以及并发架构介绍

如果懒得了解具体实现的话可以使用推荐配置(即项目中默认值),大体适用于6核12线程机器,查看自己机器的核数等比例增加减少即可。并发核心在于以下四个参数:

TagConsumerCount: 2
HonConsumerCount: 4
HonBuffer: 32
TagBuffer: 32

程序为典型的生产/消费者模型。

  • 生产者:生产则会是根据你的页面爬取范围来选择的,一个页面20个本子为一个生产者,一般来说生产速度会远大于消费速度(请求图片url并向本地写入图片的I/O远远比获取图片地址信息慢),所以消费者的个数决定了你最终的爬取速度,HonBufferTagBuffer为管道缓冲区大小,生产者生产的信息会在管道中暂时存储等候消费者获取。
  • 消费者:消费者个数由使用者决定,为HonConsumerCount,主要负责根据图片信息下载图片并写入本地文件,这部分的I/O操作是最重的,意味着大部分机器时间会由消费者耗费,越多的消费者对于速度的提升理论上会更好,当然这也看你本身的机器硬件(具体配置待我好好研究)。

下面是整体的设计图:

Open Source Agenda is not affiliated with "GentlemanSpider" Project. README Source: Youngkingman/gentlemanSpider
Stars
48
Open Issues
1
Last Commit
1 year ago
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating