upbit / pixivpy

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

Recursively retrieving bookmark list #118

Closed TianyiShi2001 closed 4 years ago

TianyiShi2001 commented 4 years ago

目前貌似只能获取用户收藏第一页。不妨加入爬取完整的收藏列表的功能?

dylech30th commented 4 years ago

可以获取所有完整的收藏的啊(

dylech30th commented 4 years ago

你只需要自己填写参数就可以了

TianyiShi2001 commented 4 years ago

哦哦,原来是favorite_works()而不是user_bookmarks_illust()

dylech30th commented 4 years ago

哦哦,原来是favorite_works()而不是user_bookmarks_illust()

p站的很多appapi返回的json都带有一个next_url属性,代表的就是下一页的数据,一直递归的请求返回数据的next_url直到值为null为止就可以爬去完整的列表

TianyiShi2001 commented 4 years ago

哦哦,原来是favorite_works()而不是user_bookmarks_illust()

p站的很多appapi返回的json都带有一个next_url属性,代表的就是下一页的数据,一直递归的请求返回数据的next_url直到值为null为止就可以爬去完整的列表

嗯,我之前看user_bookmarks_illust()返回的结果时注意到了next_url, 但是直接requests.get()是不行的,所以感到困扰来提这个问题。

刚才研究了一下源码,现在发现了得用pixivpy里的no_auth_requests_call()parse_result()。问题得到了解决。

upbit commented 4 years ago

不建议直接使用 no_auth_requests_call / parse_result,关于获取下一页数据应该用parse_qs(),demo里有相关的演示: https://github.com/upbit/pixivpy/blob/v3.5.6/demo.py#L56

    json_result = api.illust_recommended(bookmark_illust_ids=[59580629])

    # get next page
    next_qs = api.parse_qs(json_result.next_url)
    json_result = api.illust_recommended(**next_qs)
TianyiShi2001 commented 4 years ago

明白了,谢谢!