如何用爬虫爬取知乎专栏信息
发布网友
发布时间:2022-04-19 09:50
我来回答
共2个回答
热心网友
时间:2022-04-18 10:26
访问上面的URI,浏览器地址栏里直接粘贴也行,得到的返回JSON数据就包含了专栏关注数。
不管AngularJS还是其它架构,都是服务端的东西,再天花乱坠的服务端架构,到了客户端终究逃不脱HTTP协议,至少目前来说还是如此。
顺便分享一些关于爬知乎的东西。
目前来说还没有官方API的支持,可能最有用的也就是用户的“个性网址”(好别扭,下称UID)了,譬如黄继新老师的UID: jixin,不过可以由用户本人修改,但每个用户一定唯一。
以{{%UID}}代替相应的UID。
1. 获得用户专栏入口:
URI: http://www.知乎.com/people/{{%UID}}/posts GET/HTTP 1.1
XPATH: //div[@id='zh-profile-list-container']
解析上述内容,可获得该用户所有的专栏入口地址。
2. 获得专栏文章信息:
URI: http://zhuanlan.知乎.com/api/columns/{{%UID}}/posts?limit={{%LIMIT}}&offset={{%OFFSET}} GET/HTTP 1.1
{{%LIMIT}}: 表示该次GET请求获取数据项的数量,即专栏文章信息数量。我没有具体测试过最大值为多少,但是可以设置为比默认值大。默认值为10。
{{%OFFSET}}: 表示该次GET请求获取数据项的起始偏移。
解析上述内容,可以获得每篇专栏文章的信息,比如标题、题图、专栏文章摘要、发布时间、赞同数等。该请求返回JSON数据。
注意:解析该信息时,可以获得该篇专栏文章的链接信息。
3. 获得专栏文章:
URI: http://zhuanlan.知乎.com/api/columns/{{%UID}}/posts/{{%SLUG}} GET/HTTP 1.1
{{%SLUG}}: 即为2中获得的文章链接信息,目前为8位数字。
解析上述内容,可以获得专栏文章的内容,以及一些文章的相关信息。该请求返回JSON数据。
上述这些应该足够满足题主的要求了。最重要的还是要善用Chrome调试工具,此乃神器!
* * * * * * * * * *
以下是一些零散的更新,用于记录知乎爬虫的想法。当然,相关实现还是要尊重ROBOTS协议,可以通过http://www.知乎.com/robots.txt查看相关参数。
UID是对应该用户所有信息的入口。
虽然用户信息有修改间隔*(通常为若干月不等),但考虑到即使是修改用户名的操作也会使得UID变更,进而令先前的存储失效。当然这也是可以突破的:用户hash。这个hash值为32位字符串,对每个账号是唯一且不变的。
通过UID获得hash:
URI: http://www.知乎.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.知乎.com/node/MemberFollowBaseV2 POST/HTTP 1.1
Form Data
method: follow_member
params: {"hash_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
_xsrf: <xsrf>
取消关注操作
URI: http://www.知乎.com/node/MemberFollowBaseV2 POST/HTTP 1.1
Form Data
method: unfollow_member
params: {"hash_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
_xsrf: <xsrf>
知乎爬虫需要一份UID列表才能正常运转,如何获得这份列表是一个需要考虑的问题。目前一个可行的想法是选定若干大V用户,批量爬取其被关注列表。举例来说,张公子目前被关注数达到58W+,通过:
URI: http://www.知乎.com/node/ProfileFollowersListV2 POST/HTTP 1.1
Form Data
method: next
params: {"offset": {{%OFFSET}}, "order_by": "hash_id", "hash_id": "{{%HASHID}}"}
_xsrf: <xsrf>
每次可以获得20条关注者的用户信息。这些信息中包含hash_id、用户名、UID、关注/被关注数、、提问数、回答数等。
热心网友
时间:2022-04-18 11:44
推荐个很好用的软件,我也是一直在用的,就是前嗅的ForeSpider软件,
我是一直用过很多的采集软件,最后选择的前嗅的软件,ForeSpider这款软件是可视化的操作。简单配置几步就可以采集。如果网站比较复杂,这个软件自带爬虫脚本语言,通过写几行脚本,就可以采集所有的公开数据。
软件还自带免费的数据库,数据采集直接存入数据库,也可以导出成excel文件。
如果自己不想配置,前嗅可以配置采集模板,我的模板就是从前嗅购买的。
另外他们公司不光是软件好用,还有自己的数据分析系统,直接采集完数据后入库,ForeSpider内部集成了数据挖掘的功能,可以快速进行聚类分类、统计分析等,采集结果入库后就可以形成分析报表。
最主要的是他采集速度非常快,我之前用八爪鱼的软件,开服务器采,用了一个月采了100万条,后来我用ForeSpider。笔记本采的,一天就好几百万条。
这些都是我一直用前嗅的经验心得,你不妨试试。