Pixiv爬虫2.0(Golang)

浏览量3378

Pixiv爬虫2.0(Golang)

pixiv-golang版爬虫更新,新增根据关键字爬取和爬取某画师的全部图片功能,提供自定义的爬取图片比例类型功能。

新增了根据不同策略爬取图片,用户可根据需要自定义爬取策略(懂一点Golang)

Github地址 下载链接

下面介绍一下使用方法和扩展方法

使用方式

提供了几个可以自定义的爬取参数

默认: 输入关键字爬取 爬取像素比适合做电脑屏幕的宽图和长图 收藏数大于1000

参数

所有参数均不区分大小写

  • 不论采用哪种爬取策略,第一个参数都为关键字(关键字/图片ID/作者ID)

  • -s(strategy) : 爬取策略

    • -skeyword: 默认.根据关键字爬取
    • -srelated: 根据输入图片的ID爬取相关图片
    • -sauthor: 根据作者ID爬取该作者全部作画
  • -t(type) : 爬取图片比例类型
    • W: 横屏 H: 竖屏 S: 小图 O: 其他
    • 完整参数 -tWHSO 默认 -tWH
  • -b(bookmarks) : 收藏数量
    • 参数较为简单 例默认-b1000即爬取收藏大于1000的图片

示例

例如爬取 关键字 miku

miku -twhs -b666

例如ID为10086图片相关图片

10086 -srelated -tw -b10086

例如爬取作者ID10086的全部图片

10086 -sauthor -twhso -b10086

扩展方法

实现扩展方法需要少量修改代码并go build重新编译

只需要编写签名下例的方法, 建议放在strategy包下

func KeywordStrategy(p *pixivic.Pixivic) {}

Pixivic结构体定义如下

type Pixivic struct {
	GoroutinePool chan struct{}
	PicChan        chan *PicDetail
	CountDown     *sync.WaitGroup
	Memo          map[string]bool
	Done          chan bool
	// 爬取关键字
	KeyWord       string
	// 要求点赞数 默认 1000
	Bookmarks     int
	// 爬取的图片类型 W: 横屏 H: 竖屏 S: 小屏 O:其他(默认WH)
	PicType       string
	// 负责向 PicChan 提供封装好的图片信息
	CrawlStrategy func(p *Pixivic)
	// 是否取消任务
	IsCancel      int32
}

只需要提供根据输入的关键字获取相关图片信息的方法(pixivic.com网站全部为此格式)

// 存储爬取图片原始信息的结构体
type UrlDetail struct {
	Data []OriginalDetail
}

// 图片原始信息
type OriginalDetail struct {
	Id   int
	Type string
	// 图片地址
	ImageUrls []struct {
		Original string
	}
	// 创建时间
	CreateDate string
	// 图片宽度,高度,收藏数
	Width, Height, TotalBookmarks int
}

然后对每个图片信息调用

picDetail, flag := process(p, &detail)

进行封装, 会根据输入信息判断是否需要爬取,flagtrue则需要爬取

然后将picDetail传递进Pixivic结构体里的PicChan通道即可

p.PicChan <- picDetail

完整示例(根据作者ID爬取)

// 根据作者ID爬取其所有图片
func AuthorStrategy(p *pixivic.Pixivic) {
	authorId := p.KeyWord
	author := &struct {
		Data struct{
			Name string
		}
	}{}
	// 通过此接口获取作者名,作为文件夹根目录
	resp, _ := http.Get("https://api.pixivic.com/artists/" + authorId)
	json.NewDecoder(resp.Body).Decode(author)
	baseGroup := author.Data.Name

	for i := 1; ; i++ {
		// 根据作者ID获取作者图片的方法
		originUrl := "https://api.pixivic.com/artists/" + authorId +
			"/illusts/illust?page=" + strconv.Itoa(i) + "&pageSize=30&maxSanityLevel=4"

		resp, err := http.Get(originUrl)
		if err != nil {
			log.Println(err)
			break
		}
		// 存储原始图片信息
		var details = &pixivic.UrlDetail{}
		json.NewDecoder(resp.Body).Decode(details)
		resp.Body.Close()
		for _, detail := range details.Data {
			// 解析图片信息
			picDetail, flag := process(p, &detail)
			// 如果图片信息经解析符合要求且爬虫未停止则向通道添加新的任务
			if flag && atomic.LoadInt32(&p.IsCancel) == 0{
				picDetail.Group = baseGroup + "/" + picDetail.Group
				p.PicChan <- picDetail
			}
		}
		// 如果当前页不足30个这说明爬取完成了,则退出
		if len(details.Data) < 30{
			break
		}
	}
}

评论

prpr 2023-01-08 02:54:15

这是下载pixivic镜像站 还是原p站啊

添加一条评论