我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

最近学习了一点网络爬虫,并实现了利用网络爬虫爬取知乎的一些功能,这里做个小总结。网络爬虫是指按照一定的规律自动从网上抓取一些信息的程序或者脚本。我们知道机器学习、数据挖掘都是基于大量的数据来寻找一些有价值、有规律的东西,而爬虫可以帮我们解决数据获取难的问题,所以网络爬虫是我们应该掌握的一门技能。

有很多开源工具包供我们使用,我这里用到的有、、json等包,模块帮助我们实现http请求,bs4模块和json模块帮助我们从获取的数据中提取一些想要的信息,几个模块的具体功能这里就不展开了,接下来就通过函数来​​介绍如何爬取知乎。

模拟登录

为了爬取知乎,我们首先需要实现模拟登录,因为如果不登录的话,很多信息我们都无法访问。下面是登录函数,这里我直接用了知乎用户的登录函数,如下所示。你需要在函数里的数据里填入你的登录账号和密码,然后在爬虫程序启动前执行这个函数,如果没有意外的话就登录成功了,然后你就可以继续爬取你想要的数据了。注意,第一次使用这个函数的时候,程序会让你手动输入验证码,输入完之后当前文件夹里会多出文件和.gif,前者保留信息,后者保存验证码,当你再次模拟登录的时候,程序就会自动帮我们填入验证码了。

需要注意的是,在login函数中有一个全局变量s=.,我们通过这个全局变量来访问知乎,在整个爬取过程中,这个对象会维持我们持续的模拟登录。

获取基本用户信息

知乎上的每个用户都有一个唯一的ID,比如我的ID是 ,那么我们通过访问地址就能够访问到我的个人主页。个人主页里面包含了居住地、行业、性别、学历、点赞数、感谢数、关注者、被关注者等信息。因此我先来介绍一下如何使用爬虫来获取一个知乎用户的一些信息。下面的函数()用于爬取一个知乎用户的个人信息。我们给用户传递一个用户ID,函数会返回一个列表,里面包含了昵称、ID、居住地、行业、性别、公司、职位、毕业学校、专业、点赞数、感谢数、提问数、回答数、文章数、收藏数、公开编辑数、关注者数、关注者数、浏览过主页的人数等19个数据。

下面是我的主页的部分截图,从中可以看到19条数据。下面第二张图是终端显示的19条数据,我们可以对比一下,看看是否全部抓取到了。这个功能我调试了好久,因为不同人的主页信息完整性不一样。如果在使用过程中发现任何错误,请告诉我。

python 爬取知乎_python爬知乎_python爬虫知乎

获取喜欢某个答案的所有人的列表

知乎上有个问题:如何写一个爬虫程序,爬取知乎上所有点赞了某个答案的用户?我参考了段小草的回答,关于爬虫入门,然后想到了下面这个功能。

这里我们先粗略的分析一下整个流程。要知道知乎上的每一个问题都有一个唯一的ID,从地址就可以看出来。比如问题“2015年你读了哪些书,觉得它们名不副实?”的地址是 ,它的ID就是 。而每个问题下的每个答案也都有一个唯一的ID。比如这个问题“2015年你读了哪些书,觉得它们名不副实?”下得票最高的答案——俞灏明的回答——知乎的地址链接是 ,末尾就是这个问题下答案的唯一ID。不过我们这里用的不是这两个ID,而是抓取点赞者列表时用到的唯一ID。这个ID的获取方法如下:比如我们打算抓取如何评价电视剧《世间正道沧桑》? - 老主编的回答 - 知乎的点赞列表,首先打开,点击“5321人赞同”,会抓取一个“GET”包。把光标放到上面,会看到一个链接,就是我们抓取点赞列表时使用的唯一ID。注意,这个ID是回答被点赞后才有的。(推荐电视剧《人间正道沧桑》,该剧以杨立青三兄妹之间的恩怨情仇为题材,从大革命时期到解放战争时期,全面客观地呈现了国共两党之间的思想斗争,每次看都会有新的理解和体会。)

获取到唯一ID之后我们通过模块获取知乎返回的信息,里面包含一个json语句,里面包含了点赞者的信息。另外我们在网页上浏览点赞者列表的时候,每次只能看到20个,每次下拉到列表最底下的时候,都会加载20个信息,而加载20个信息的请求地址也包含在之前的json语句中,所以我们需要从json语句中提取累计的信息和下一次的请求地址。在网页上浏览点赞者列表的时候,我们可以看到点赞者的昵称、头像、获得了多少个点赞和感谢、提问和回答的数量。这里我提取了每个点赞者的昵称、主页地址(也就是用户ID)、点赞数量、感谢数量、提问数量、回答数量。关于头像的提取,我会在下面的函数中实现。

提取出点赞者列表之后,我将这些信息保存在一个以唯一ID命名的txt文件中。下面是该功能的具体实现。

请注意,点赞者列表中会有匿名用户,或者有用户已经退出,这种情况下我们就无法抓取到该用户的信息了,我在txt文件中添加了一句“点赞者信息丢失”。

使用同样的方法,我们可以抓取某个用户的关注者列表和被关注者列表,下面列出了这两个函数。但是,关注者列表抓取函数有一个问题,每次用来抓取大V的关注者列表,抓取到第10020个时程序就会报错,好像知乎有访问限制一样。这个问题我暂时没找到解决办法,希望有人能告诉我。因为没见过哪个用户关注了10020+个人,所以抓取被关注者列表的函数暂时没发现报错。

提取用户头像

下一步是捕获用户的头像。给定一个唯一 ID,以下函数会自动解析其主页,从中解析出用户头像的地址,捕获图像并将其保存到本地文件。该文件以用户的唯一 ID 命名。

结合其他功能,我们可以抓取某个答案所有点赞者的头像,某个大V的所有头像等等。

获取问题的所有答案

给定一个唯一的 ID,下面的函数帮助爬取问题的所有答案。注意,只爬取答案的文本部分,省略了图片。答案保存在以答题者 ID 命名的 txt 文件中。

数据库访问数据

完成上面的功能之后,接下来就是将用户信息保存到数据库中,方便数据的读取和使用,我只是接触了一下,只实现了将用户信息存入表中。

熟悉了使用方法之后,我接下来的步骤就是爬取大量的用户信息以及用户之间的信息,尽量把大V之间的关系可视化。接下来应该就是学习爬虫框架,爬取微博了。

另外,在写这篇博客的时候,我重新测试了上述功能。之后在 上访问知乎时,系统提示“由于账号访问频率过高”,并要求输入验证码。看来知乎已经开始限制爬虫了。这种情况下,我们需要使用一些反爬虫的技巧,比如控制访问频率等。等我有了系统的了解后,我会再补充这方面的内容。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/5889.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线