文章采集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、关注者/关注者数量、问题数量、答案数量等。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线