文章采集api(来说获得用户专栏文章的链接信息,此乃神器!)
优采云 发布时间: 2022-02-17 05:24文章采集api(来说获得用户专栏文章的链接信息,此乃神器!)
目前还没有官方API支持。或许最有用的就是用户的“个性化URL”(好别扭,以下简称UID),比如黄继新老师的UID:jixin,不过可以用户自己修改,但是每个用户都必须是独特的。
将对应的 UID 替换为 {{%UID}}。
1. 获取用户列条目:
URI: http://www.zhihu.com/people/{{%UID}}/posts GET/HTTP 1.1
XPATH: //div[@id='zh-profile-list-container']
通过解析上述内容,可以得到用户的所有列入口地址。
2. 获取列 文章 信息:
URI: http://zhuanlan.zhihu.com/api/columns/{{%UID}}/posts?limit={{%LIMIT}}&offset={{%OFFSET}} GET/HTTP 1.1
{{%LIMIT}}:表示本次GET请求获取的数据项个数,即文章列信息的个数。我没有具体测试过最大值是多少,但是可以设置大于默认值。默认值为 10。
{{%OFFSET}}:表示本次GET请求获取的数据项的起始偏移量。
通过分析以上内容,可以得到每一列文章的信息,如标题、题图、列文章摘要、发布时间、批准数等。请求返回JSON数据。
注意:解析该信息时,可以得到该列文章的链接信息。
3. 获取列 文章:
URI: http://zhuanlan.zhihu.com/api/columns/{{%UID}}/posts/{{%SLUG}} GET/HTTP 1.1
{{%SLUG}}:是2中得到的文章链接信息,目前是8位数字。
通过分析以上内容,可以得到文章栏的内容,以及文章的一些相关信息。请求返回 JSON 数据。
以上应该足以满足题主的要求。最重要的是用好Chrome调试工具,这是神器!
* * * * * * * * * *
这里有一些零散的更新来记录 知乎 爬虫的想法。当然,相关实现还是需要尊重ROBOTS协议,可以通过
/机器人.txt
检查相关参数。
UID是用户所有信息的入口。
虽然用户信息有修改间隔限制(一般为几个月不等),但考虑到即使是修改用户名的操作也会导致UID发生变化,从而使之前的存储失效。当然,这也可以破解:用户哈希。这个哈希值是一个 32 位的字符串,对于每个账户来说都是唯一且不变的。
通过 UID 获取哈希:
URI: http://www.zhihu.com/people/%{{UID}} GET/HTTP 1.1
XPATH: //body/div[@class='zg-wrap zu-main']//div[@class='zm-profile-header-op-btns clearfix']/button/@data-id
通过解析上面的内容,可以得到UID对应的hash值。(是的,该值存储在“关注/取消关注”按钮中。)这唯一地标识了用户。
目前没有办法通过hash_id获取UID,但是有间接方法可以参考:定期通过关注列表查看用户信息是否发生变化,当然关注/取消关注操作也可以自动化:
关注操作
URI: http://www.zhihu.com/node/MemberFollowBaseV2 POST/HTTP 1.1
Form Data
method: follow_member
params: {"hash_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
_xsrf:
取消关注操作
URI: http://www.zhihu.com/node/MemberFollowBaseV2 POST/HTTP 1.1
Form Data
method: unfollow_member
params: {"hash_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
_xsrf:
知乎爬虫需要一个UID列表才能正常运行,如何获取这个列表是需要考虑的问题。目前一个可行的思路是选择几个大V用户,批量爬取他们的关注列表。比如张老师目前跟随着58W+,通过:
URI: http://www.zhihu.com/node/ProfileFollowersListV2 POST/HTTP 1.1
Form Data
method: next
params: {"offset": {{%OFFSET}}, "order_by": "hash_id", "hash_id": "{{%HASHID}}"}
_xsrf:
每次可以获得20个关注者的用户信息。此信息包括 hash_id、用户名、UID、关注者/关注者数量、问题数量、答案数量等。