upbit / pixivpy

Pixiv API for Python
https://pypi.org/project/PixivPy3/#files
The Unlicense
1.8k stars 147 forks source link

search_illust函数是否有办法可以让我只获取到r18图片 #365

Closed giaosan closed 3 months ago

giaosan commented 4 months ago

我通过这个库编写了一个机器人,但是search_illust函数一次只返回30个数据,有时候返回很多次数据中都没有r18图片,所以search_illust函数是否有办法可以让我只获取到r18图片,或者依赖别的函数

Xdynix commented 4 months ago

这个库是模仿成Pixiv的iOS App来使用App的API的。因此它只能做到和Pixiv的App一样的事。而App里并不能设置只返回R-18的搜索结果,因此这个库也没办法。

192f0a045f1b1004c309b1fa7ba88a80

如果想要只返回R-18的结果,可以考虑模仿桌面端的浏览器发送请求。

giaosan commented 3 months ago

我对这方面并没有什么了解,对于模仿桌面端的浏览器发送请求,能否提供一些建议或者给我项目让我自己去看

Xdynix commented 3 months ago

你可以在电脑的浏览器上打开Pixiv,然后按F12打开开发者工具,然后在搜索栏中进行搜索。在开发者工具的“网络”标签页,可以看到浏览器向Pixiv发出的所有请求,其中应该会有一个是专门搜索的。记录下它使用的URL和请求头,然后让你的代码也能发送几乎完全一样的内容,就能得到对应的结果。有许多库可以让你发送请求,如requestsaiohttp等。

搜索时的参数,如关键词、过滤等都应该会包含在URL里,你可以根据你自己的需求改变它。请求头里不一定全都要求发送,你可以自己尝试删除一些看是否还工作正常。另外,Pixiv的服务器很可能还会要求请求包含合法的Cookie,有些库如browser_cookie3可以帮你直接从电脑浏览器里提取它们,而不需要再手动复制。


另一种思路是使用SeleniumPuppeteer之类的库直接遥控电脑上的浏览器进行操作,此时就不需要考虑模仿请求的问题了,只是将人工操作浏览器的部分(输入搜索关键词、点击搜索按钮等)自动化了。

upbit commented 3 months ago

除了ranking这类榜单接口,searc是没有“只筛选r-18”选项的。几个建议可以确认下:

  1. 参考 @Xdynix 2楼的方法,检查app里R-18开关是否开启(关闭r-18后,任何接口都会过滤此类内容)
  2. 在app检查search类的请求,看看是否提供了仅r-18的参数(我记得有个tag筛选,可以加R18 tag看是否符合预期)
Xdynix commented 3 months ago

使用tag进行搜索确实更简单,我忘记了这个方法。在搜索关键字加上“R-18”基本可以确保这个结果。只有极少数情况是非R-18的作品被手动加上这个tag的。