*

摘要

在日常生活,知乎账号的关注度是我们非常关系的事情,这可以让我们了解到自己发布的文章的影响力,为此,收集知乎粉丝用户的信息显得非常的必要。为了收集粉丝的详细信息,所以用python语言编写爬虫程序抓取粉丝用户的信息汇总,抓取关注的人的信息,然后存储到数据库。利用的爬虫程序抓取的粉丝用户信息和关注的人的用户信息的同时,用递归算法抓取用户的用户信息,方便快捷的抓取大量用户的信息。

关键字:python,爬虫,知乎用户。  

*

Abstract

In our daily life, the attention of Zhihu account is a matter of great concern to us, which can let us know the influence of the articles published by ourselves. Therefore, it is very necessary to collect the information of Zhihu fans. In order to collect the detailed information of fans, we use Python language to write a crawler to capture the information of fan users, capture the information of the people concerned, and then store it in the database. At the same time, it uses recursive algorithm to capture the user information of the user, which can capture a large number of user information conveniently and quickly.

**Keywords**: Python, crawler, Zhihu user.

*

目录

摘要 2
Abstract 3
1. 引言 5
1.1. 研究背景 5
1.2. 爬虫研究意义 5
1.3. 研究的内容 5
2. 系统结构 5
2.1. 开发准备 5
2.2. 爬虫项目应用的技术 6
2.3. 系统实现思路 7
3. 实现代码 10
3.1. 爬取用户详细信息 10
3.2. 爬取用户关注人列表 13
3.3. 爬取用户粉丝列表 14
3.4. 爬取用户信息存储至mongoDB数据库 15
4. 结果展示 17
4.1. 爬虫项目运行结果展示 17
4.2. 爬取知乎用户信息结果展示 17
5. 总结和展望 18
5.1. 项目设计总结 18
5.2. 未来展望 19
参考文献 19

1. 引言
1.1. 研究背景
  随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。为了解决这个问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。而对于各个平台的用户都有自己的粉丝和关注的人,,如何大量获取这些用户的信息并做整理,如何对自己的粉丝和关注的人做出统计和分析,是我们面临的一大难题。

1.2. 爬虫研究意义
  面对大量数据从网页获取和统计的难题,爬虫程序的编写将会给我们的获取、归类、统计带来了很大便利。就本次研究的课题,如何利用python语言编程的爬虫程序抓取知乎用户信息的研究,对于想分析自己发布文章的影响力,统计分析粉丝的数量和类型有重大的意义,为于作知乎影响力的数据分析节省了大量的统计工作和统计成本。本次的研究旨在对爬虫技术的分析,如何分析对应的网页信息,如何爬取重要的网页信息,对以后爬取同一类或者其他类别的网页信息,有启发性的作用。

1.3. 研究的内容

本次的研究的内容是分析网页的数据请求和数据的返回的获取,能够分析请求的特点,能够利用Scrapy框架编写爬虫程序,从知乎的主页获取用户信息的同时,获取用户的粉丝用户信息,获取用户关注的人的信息。实现获取信息的保存。

2. 系统结构
2.1. 开发准备

  此次爬取知乎用户信息的爬虫项目的设计是利用python语言编写的爬虫程序,同时需要存储爬取的信息,故需安装以下软件资源。

**操作系统**:windows10操作系统。 **其他软件**:Python3,爬虫异步框架Scrapy,爬虫开发工具PyCharm,存储数据的MongoDB数据库,数据库管理软件NoSQL Manager for MongoDB。

  选用以上的软件来开发爬虫项目的设计,是因为这样有很多显著的优势,选用的软件的理由如下图2-1所示。

Scrapy 爬取知乎用户信息
*

图2-1,爬虫项目开发所需软件

2.2. 爬虫项目应用的技术
  

  1、 Python程序设计语言,是基本爬虫程序编写语言,Python程序设计语言,不仅功能强大,而且易学易用,相对其他高级语言,比如C和C++等,Python有很大的优势,其给初学者的印象是简洁,所有变量都不需要定义。此外,Python中内容是自动管理的,程序员可以专注程序本身。
  

  2、 Scrapy爬虫一部框架,Scrapy 是一个为了抓取网页数据、提取结构性数据而编写的应用框架,该框架是封装的,包含 request (异步调度和处理)、下载器(多线程的 Downloader)、解析器(selector)和 twisted(异步处理)等。对于网站的内容爬取,其速度非常快捷。利用Scrapy创建的爬虫项目,其项目框架内的相应的作用如下:
 (1) 放置 spider 代码的目录文件 spiders(用于编写爬虫)。
 (2) 项目中的 item 文件 items.py(用于保存所抓取的数据的容器,其存储方式类似于 Python 的字典)。
 (3) 项目的中间件middlewares.py(提供一种简便的机制,通过允许插入自定义代码来拓展 Scrapy 的功能)。
 (4) 项目的 pipelines 文件 pipelines.py(核心处理器)。
 (5) 项目的设置文件 settings.py。
 (6) 项目的配置文件 scrapy.cfg。
  

  3、 MongoDB数据存储,MongoDB是开源产品,On GitHub,Licensed under the AGPL,起源&赞助by MongoDB公司,提供商业版licenses许可,功能方面,其JSON文档模型、动态的数据模式、二级索引强大(特有)、查询功能、自动分片、水平扩展、自动复制、高可用、文本搜索、企业级安全、聚合框架MapReduce、大文件存储GridFS、地理位置索引,支持多种存储引擎。MongoDB使用场景如下:
  1)网站数据:MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  2)缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载。
  3)大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  4)高伸缩性的场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对 MapReduce 引擎的内置支持。
  5)用于对象及 JSON 数据的存储:MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询。

  以上的各个技术的应用优势,对开发爬虫项目有非常重大的优势,特别的,使用Scrapy来编写爬虫项目,使得整个项目的开发显得开发流程非常的清晰,对应爬虫项目程序的编写意义非常的重大。

2.3. 系统实现思路
  

  编写爬虫项目,一开始非常重要的步骤就是分析所要抓取的网页的特点,才能更好编写爬虫的网页请求并获取相应的网页数据。
  首选,我们选定爬虫爬取用户信息的起始人,最好是关注数和粉丝数较多的大V作为爬取的起始点, 本次我们选择的是以下站点用户作为我们爬取用户信息的起始点,如图2-2所示,我们可以看到站点的地址栏是https://www.zhihu.com/people/excited-vczh,是知乎的官网地址加people加excited-用户名的形式,我们要抓取的信息有用户名、居住地,行业,个人简介,问题的个数,分享数量,关注数,粉丝数等等。Scrapy 爬取知乎用户信息
*

图2-2选取的站点

下面我们展开该用户关注的人的列表,当我们点击下一页的时候,可以发现,其实是发出了知乎的一个接口,后面包含几个参数的形式的请求形式。同时我们可以看到返回给浏览器的是一个json数据,展开可以看到对应的页面的关注的人的基本信息。如下图2-3所示。同时我们可以发现,返回的数据中的url_token数据就是我们跳转至该关注人用户的一个变量,如图2-4地址栏所示。
Scrapy 爬取知乎用户信息
         *

图2-3请求返回的数据

Scrapy 爬取知乎用户信息
        *

图2-4点击关注用户跳转的页面
       
  除了以上的分析发现之外,我们还可以发现,当我们把鼠标放到用户名上的时候,其实是浏览器发出了一个有非常长的参数,获取用户的信息,如图2-5所示,为此,我们只要请求这个url,就可以获得列表用户的信息。
Scrapy 爬取知乎用户信息
         *
图2-5获取关注人的信息分析
         
  下面我们就逐渐介绍如何通过爬虫实现对用户信息的爬取,实现对关注人信息、粉丝信息的抓取。具体的代码实现思路如下图2-6所示。
Scrapy 爬取知乎用户信息
         *
图2-6系统代码实现框架

3. 实现代码
3.1. 爬取用户详细信息
  1、在Python3和Scrapy已安装的情况下,我们首先新建一个Scrapy爬虫项目,使用命令Scrapy startproject zhihuUser,显示如图3-1所示,就新建好了Scrapy框架的爬虫项目了。
Scrapy 爬取知乎用户信息
         *

图3-1新建爬虫项目
         
  2、接下来用PyCharm打开我们新建的项目,然后新建spdier,使用命令scrapy genspider zhihu www.zhihu.com, 如图3-2所示,新建好的spider如图3-3所示。
Scrapy 爬取知乎用户信息
           *
图3-2新建spdier
           
Scrapy 爬取知乎用户信息
         *
图3-3新建的spider代码

  3、如果就此运行爬虫项目,会发现出现500的请求错误,那是因为我们区访问的不是一个浏览器,那么直接返回的就是500的状态码,所以我们需要在setting.py文件中给她加入浏览器的信息。'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.,如图3-4所示。

Scrapy 爬取知乎用户信息
         *

图3-4,修改请求头

4、 至此,根据上面分析的获取用户的详细信息、关注人列表、粉丝列表的请求url,可以在zhihu.py中构造好爬取用户详细信息的url,构造好获取关注人列表的请求url和获取粉丝列表的url。如图3-5所示。
Scrapy 爬取知乎用户信息
          *

图3-5构造请求的url

  5、 做完以上的准备工作,就可以编写获取抓取的起始人的详细信息了,在发布请求并获取用户详细后,定义回调函数def parse_user(self, response):解析返回的数据并把数据当成item存起来。起始人信息的获取请求如图3-6所示,回调函数解析返回的数据的代码如图3-7所示。在item.py定义数据存储的Field()如图3-8所示。

Scrapy 爬取知乎用户信息
         *

图3-6起始人信息获取请求
         
Scrapy 爬取知乎用户信息
       *
图3-7起始人信息获取成功的回调函数
       
Scrapy 爬取知乎用户信息
          *
图3-8定义的Field()
  

  至此就可以爬取的起始人的信息了,接下来我们就可以获取起始人的关注人的列表了。

3.2. 爬取用户关注人列表
  1、 爬取起始人关注人的列表,定义的列表请求url如图3-9所示,获取列表成功后,通过上面的分析我们知道列表获取成功后返回的数据中url_token是表示请求该用户详细信息的关键,因此,关注人列表请求成功后,拿到该用户的url_token,再次请求用户的详细信息。获取关注人信息时,要经过翻页,通过关注人的列表返回,我们知道is_end的值判断是否为最后一页,否则,每一次回调最后都通过获取next执行翻页。获取关注人列表并获取相应详细信息的代码如图3-10所示。
Scrapy 爬取知乎用户信息
         *

图3-9关注人列表请求

Scrapy 爬取知乎用户信息
      *

图3-10获取关注人列表用户的详细信息

2、 通过以上代码的编写可以实现起始人用户信息、关注人信息的爬取,为了达到获取关注人信息后,又获取该用户的关注人列表和其对应的详细信息,采用递归函数的形式,在获取详细信息后再发请求获取该用户关注人列表。代码如图3-11所示。
Scrapy 爬取知乎用户信息
  *

图3-11获取列表详细信息后再请求获取该用户关注人列表
  

  以上就实现了获取关注人列表并获取列表中对应用户的详细信息,通过再请求,实现一直获取用户关注人详细信息。

3.3. 爬取用户粉丝列表
  1、 爬取用户粉丝列表和爬取用户粉丝列表的步骤一样,定义的列表请求url如图3-12所示,获取列表成功后,通过上面的分析我们知道列表获取成功后返回的数据中url_token是表示请求该用户详细信息的关键,因此,粉丝列表请求成功后,拿到该用户的url_token,再次请求用户的详细信息。获取粉丝信息时,要经过翻页,通过粉的列表返回,我们知道is_end的值判断是否为最后一页,否则,每一次回调最后都通过获取next执行翻页。获取粉丝列表并获取相应详细信息的代码如图3-13所示。
Scrapy 爬取知乎用户信息
         *

 图3-12粉丝列表请求

Scrapy 爬取知乎用户信息
      *

图3-13获取粉丝列表用户的详细信息

  2、 通过以上代码的编写可以实现起始人用户信息、粉丝信息的爬取,为了达到获取粉丝信息后,又获取该用户的粉丝列表和其对应的详细信息,采用递归函数的形式,在获取详细信息后再发请求获取该用户粉丝列表。代码如图3-14所示。

Scrapy 爬取知乎用户信息
  *

图3-14获取列表详细信息后再请求获取该用户粉丝列表

  以上就实现了获取粉丝列表并获取列表中对应用户的详细信息,通过再请求,实现一直获取用户粉丝详细信息。

3.4. 爬取用户信息存储至mongoDB数据库
  通过获取的用户信息存储再item中,为了永久保存,我们选择mongoDB存储获取的数据,选择mongoDB数据库的理由前面已经做了讲解,这里就不在赘述。那么我们在pipeline.py管道文件中,启用mongoDB数据库存储获取的数据,数据库初始化实现的代码如图3-15所示,其中图3-16是必须实现的函数,其功能是实现数据的插入和更新。
Scrapy 爬取知乎用户信息
       *

图3-15 mongoDB数据初始化代码
       
Scrapy 爬取知乎用户信息
       *
图3-16实现item数据存储关键代码

  同时,我们还需再setting.py文件中**管道文件,如图3-17所示,定义MONGO_URI,MONGO_DATABASE,如图3-18所示。

Scrapy 爬取知乎用户信息
          *

图3-17**管道文件
          
Scrapy 爬取知乎用户信息
   *
图3-18 定义义MONGO_URI,MONGO_DATABASE

4. 结果展示
4.1. 爬虫项目运行结果展示

  至此,我们的爬取知乎用户信息的爬虫项目就已经完成了,使用Scrapy提供的运行爬虫项目的命令scrapy crawl zhihu 运行爬虫项目,结果获取成功如图4-1所示。
Scrapy 爬取知乎用户信息
       *

图4-1爬虫项目获取用户信息成功

4.2. 爬取知乎用户信息结果展示

  使用我们项目开始时安装的数据库管理软件NoSQL Manager for MongoDB,打开后可以看到有名称为zhihu的数据库,打卡它,可以看到users的数据表,如图4-2所示。

Scrapy 爬取知乎用户信息
           *

图4-2查看数据库

打开users就可以看到已经存储到数据库的所有用户,展开可以查看用户的详细信息,如图4-3所示。
Scrapy 爬取知乎用户信息
         *

图4-3查看用户的详细信息

5. 总结和展望
5.1. 项目设计总结

  本次抓取知乎用户信息的爬虫项目的开发,是学习Python程序设计语言以来的一次大的实践,总体的设计良好,实现的思路比较清晰。下面我将从python学习效果和Scrapy框架技术的学习,以及程序编写方面对此次项目的设计做出总结。
  Python学习方面,自学习python程序设计语言以来,我在python的语法,算法方面都有做了一定的学习,此次能够正确并恰当的运用,是对学习成功的最好检验。
  Scrapy框架技术方面,对于Scrapy框架的了解,两个月前我脑中的概念完全是空白的,初次接触,我查阅了大量的资料,充分了解框架的作用,框架的每一个文件的作用,以及如何再框架上开发爬虫项目。正因如此,此次爬虫项目的开发顺利的进行与scrapy的显著优势是分不开的。
  编程方面,此次的项目开发,虽然代码量非常的少,但是其思路清晰的编程和养成在重要函数和关键属性添加注释的习惯,是我受益终身。

5.2. 未来展望
  通过此次的爬虫项目开发,我对于学习Python的兴趣更加浓烈了,利用各种技术爬取各式各样的网页信息显得非常的有趣,今后我会经常分析各种网页信息,尝试将其网页信息爬取下来。正所谓孰能生巧,我坚信,只要不断的积累各类网页的爬取经验,肯定能够在以后的爬虫项目的开发中得心应手,在拿到要爬取的站点时,实现思路能够信手拈来。当然,Python的作用不仅限于爬虫的开发,它可是目前仅次于java的程序设计语言,它除了爬虫项目的开发,还可以做网页,做系统,开发游戏。总之,Python的学习不会因为课程的结束而结束,相反,这仅是一个开始。只要坚持一路走下去,Python会带你走向另一个高度,加油!
参考文献
[1] 罗刚、王振东,《自己动手写网络爬虫》,清华大学出版社。
[2] 崔庆才, Python3爬虫入门到精通课程视频【附软件与资料】
[3] 百度百科——网络爬虫

相关文章:

  • 2021-11-27
  • 2021-05-25
  • 2021-08-15
  • 2021-09-08
猜你喜欢
  • 2021-12-09
  • 2021-11-17
  • 2021-05-16
  • 2021-12-12
  • 2021-07-09
  • 2021-07-11
  • 2021-12-12
相关资源
相似解决方案