本篇概述:上篇的后续;主要是分析数据接口,拿到关注画师的所有作品的详细信息
1、分析——关注界面
关注界面(默认公开) https://www.pixiv.net/bookmark.php?type=user&rest=show
这里关注画师全在公开界面,虽然非公开获取也是ok的
公开和非公开只是,https://www.pixiv.net/bookmark.php?type=user&rest=show 后面分别是rest=show 和 rest=hide
F12 查看 Elements ,寻找画师列表和页数
- 画师列表全在一个 class=members 的 div 中
- 画师信息在user-data中,有作者 id、主页 url、作者 name
- 最大页数在一个 class=_pager-complex 的 div,倒数第二个li
2、代码——bs4匹配
1 | # 找到最大页数 |
3、代码——获取关注画师的信息
1 | #获取关注画师界面的信息 |
对于文笔不好的人来说,还是上代码来的舒服
毕竟 talk is cheap, show me code !
4、分析——画师个人主页及数据流向
- 这里说下,为什么不获取 user-data 里面的 href 属性?
- 正常流程不应该是拿到 href 然后访问 url,获取源码,然后拿到作品信息。
- 原因是:这里用的是Ajax请求,所以源码中并没有我们想要的数据
- 我们可以直接通过接口拿到这个画师的所有作品的数据。
该画师有73个作品,但是点击进入主页发现只有小小的一部分
勾上 Preserve log,点击查看全部
新加载的页面显示了所有的作品(虽然分为2页)
与之前的 XHR 比较,接下来的目标在红框标出来的三个文件(不一定全是我们的目标)
点击第一个illust,发现 Preview 里是标签 tags (json数据)
点击第二个illust,Preview 里是作品信息 (json数据)
确定了第二个 illust 是目标之后,模仿它进行请求
但是发现他的 url 是一串巨长的字符串,由 一页的所有作品 id 和 is_manga_top=0 拼接而成
url 中作品 id 的拼接顺序是由新到旧(也就是数字大的在前面)
1 | url = https://www.pixiv.net/ajax/user/1117751/profile/illusts?ids%5B%5D=73742388&ids%5B%5D=71855085&ids%5B%5D=71849582&ids%5B%5D=71685985&ids%5B%5D=68213121&ids%5B%5D=67765964&ids%5B%5D=67758280&ids%5B%5D=67757922&ids%5B%5D=67619936&ids%5B%5D=67404010&ids%5B%5D=66856979&ids%5B%5D=65998170&ids%5B%5D=65834643&ids%5B%5D=65393332&ids%5B%5D=63861794&ids%5B%5D=63761535&ids%5B%5D=63617575&ids%5B%5D=63475838&ids%5B%5D=63090307&ids%5B%5D=62347061&ids%5B%5D=62200016&ids%5B%5D=62178209&ids%5B%5D=61785521&ids%5B%5D=61656195&ids%5B%5D=61489588&ids%5B%5D=60732958&ids%5B%5D=60588424&ids%5B%5D=60384884&ids%5B%5D=59959669&ids%5B%5D=59706889&ids%5B%5D=59656129&ids%5B%5D=59541311&ids%5B%5D=59180046&ids%5B%5D=58977788&ids%5B%5D=58919004&ids%5B%5D=58029173&ids%5B%5D=57027442&ids%5B%5D=57027347&ids%5B%5D=56527887&ids%5B%5D=56525716&ids%5B%5D=56309403&ids%5B%5D=56110382&ids%5B%5D=55934890&ids%5B%5D=55680445&ids%5B%5D=54917440&ids%5B%5D=54900477&ids%5B%5D=54900429&ids%5B%5D=54900380&is_manga_top=0 |
下一步目标:既然有所有作品 id 拼接成的 id ,说明是有接口获取所有作品 id 的。
5、模仿请求
在 XHR 中继续寻找,发现一个叫 all 文件,点开 Preview (json数据)
all 的 Request URL: https://www.pixiv.net/ajax/user/1117751/profile/all ,/user/后面的数字是作者的 id
在 Preview 中发现 illusts (插画)属性 ,下面的应该就是作品 id 了,可以自己复制一个去验证一下。
补充:有些画师在 manga (漫画)属性也是有值的,所以这里需要和前面的 illusts 属性合并
Request URL 放到浏览器中去访问,将访问结果复制到 json.cn 进行格式化
6、代码——获取关注画师的所有作品信息
- 获得关注画师的信息,比如 id、name
- 通过 https://www.pixiv.net/ajax/user/[画师id]/profile/all 来获取画师的所有作品 id
- (单图 动图 多图 都在 illusts 属性中,漫画虽然是单图和多图,但在 manga属性 中)
- 接着通过构造作品 id 和 is_manga_top=0 的 url 去请求作品的详细信息
1 | # 获取关注画师界面的信息 |
works_data = works_json[“body”][“works”].values()
因为 keys() 是作品 id,values() 里面也有,所以直接 values() 就好了
7、最后
本篇主要是分析数据接口,拿到关注画师的所有作品的详细信息
那么下篇再根据单图动图多图进行图片下载,预计文件存储、其他的小功能和最后的代码汇总得放在下下篇了。
へ( ̄  ̄;へ)