Python爬虫抓取知乎所有用户信息

简介:

今天用递归写了个抓取知乎所有用户信息的爬虫,源代码放在了github上,有兴趣的同学可以上去下载一下看看,这里介绍一下代码逻辑以及分页分析,首先看网页,这里本人随便选了一个大V作为入口,然后点开他的关注列表,如图

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

注意,本人爬虫的全称都是处于非登录状态的。这里的粉丝列表以及关注者列表都是后台ajax请求得到的数据(没有听过ajax的童鞋别慌,ajax请求跟普通浏览器的请求没有区别,它主要就是在我们 浏览网页时候偷偷给服务器发送的请求,就是为了节省流量以及减少请求数,不然每次看点新数据都全部刷新网页,服务器压力很大的,所以有了这玩意),然后我们找到粉丝列表以及关注者列表的URL,这个很简单,在chrome浏览器下面点击一下页数切换就可以找到,如图

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

找到关注者以及粉丝的URL就好办理,下面看一看这些数据,这里以粉丝的数据举例,如图,是一段json

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

这里找到了粉丝的数据,不过这里不是用户的详细信息,只有部分数据,不过他提供了一个token_url,我们就可以获取这个ID访问用户的详细信息了,我们看看每个用户的详细信息怎么提取。这里楼主发现,在观看粉丝或者关注列表的时候,网页是会自动触发该用户详细信息的请求,如图

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

这次获得的是用户详细信息查询的URL,这里看一看这个详细信息的URL,如图

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

上面介绍了网页的基础分析,下面说一下代码的思路,这次爬虫用到了递归,本次用的scrapy抓取以及mogodb数据库存储的。
首先本人是用了一个大V作为爬虫第一个网页,然后分三步,第一步是爬了该大V的详细信息然后存入数据库,第二步是爬取了该大V的粉丝,第三是爬取了该大V 的关注者(其实就是爬取粉丝或者关注者的token_url),完成之后,利用爬取的粉丝以及关注者的数据构造他们每个人详细信息的url,然后挖取详细 信息存入数据库。到这里递归第一步算是完成了,然后爬虫会从每一个粉丝和关注者入手,分别爬取他们的粉丝以及关注者的详细数据,不断递归
在代码里面还有加入了一些自动翻页的功能,有兴趣可以看看。下面是我们item里面定义要抓取的数据:
import scrapyclass ZhihuUserItem(scrapy.Item):
 # define the fields for your item here like:
 # name = scrapy.Field()
 answer_count = scrapy.Field()

#回答数量
 articles_count = scrapy.Field()

#写过的文章数
 follower_count = scrapy.Field()

#粉丝数量
 following_count = scrapy.Field()

#关注了多少人
 educations=scrapy.Field()

#教育背景
 description = scrapy.Field()

#个人描述
 locations = scrapy.Field()

#所在地
 url_token =scrapy.Field()

#知乎给予的每个人用户主页唯一的ID
 name=scrapy.Field()

#用户昵称
 employments = scrapy.Field()

#工作信息
 business=scrapy.Field()

#一些工作或者商业信息的合集
 user_type =scrapy.Field()

#用户类型,可以是个人,也可以是团体等等
 headline =scrapy.Field()

#个人主页的标签
 voteup_count = scrapy.Field()

#获得的赞数
 thanked_count=scrapy.Field()

#获得的感谢数
 favorited_count = scrapy.Field()

#被收藏次数
 avatar_url = scrapy.Field()

#头像URl

代码一共不足80行,运行了一分钟就抓了知乎一千多个用户的信息,这里上张结果图

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy
最近忙完别的事了,终于可以天天写爬虫了,不知道大家这篇有什么问题不,可以随便向我提
最后提一提,爬取一定要伪装好headers,里面有些东西服务器每次都会检查。

原文发布时间为:2017-04-09
本文作者:蜗牛仔
本文来自云栖社区合作伙伴“ Python中文社区”,了解相关信息可以关注“ Python中文社区”微信公众号
相关文章
|
12天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
16天前
|
数据采集 Python
【python】爬虫-西安医学院-校长信箱
本文以西安医学院-校长信箱为基础来展示爬虫案例。来介绍python爬虫。
【python】爬虫-西安医学院-校长信箱
|
22天前
|
数据采集 安全 Python
python并发编程:Python实现生产者消费者爬虫
python并发编程:Python实现生产者消费者爬虫
24 0
python并发编程:Python实现生产者消费者爬虫
|
1月前
|
数据采集 数据挖掘 调度
异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取
本文介绍了如何使用Python的Aiohttp框架构建异步爬虫,以提升数据抓取效率。异步爬虫利用异步IO和协程技术,在等待响应时执行其他任务,提高效率。Aiohttp是一个高效的异步HTTP客户端/服务器框架,适合构建此类爬虫。文中还展示了如何通过代理访问HTTPS网页的示例代码,并以爬取微信公众号文章为例,说明了实际应用中的步骤。
|
2天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
11 0
|
5天前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
12天前
|
开发者 索引 Python
实践:如何使用python在网页的表格里抓取信息
实践:如何使用python在网页的表格里抓取信息
|
12天前
|
数据采集 JSON 网络协议
「Python系列」Python urllib库(操作网页URL对网页的内容进行抓取处理)
`urllib` 是 Python 的一个标准库,用于打开和读取 URLs。它提供了一组模块,允许你以编程方式从网络获取数据,如网页内容、文件等。
35 0
|
17天前
|
数据采集 存储 前端开发
Python爬虫如何快速入门
写了几篇网络爬虫的博文后,有网友留言问Python爬虫如何入门?今天就来了解一下什么是爬虫,如何快速的上手Python爬虫。
20 0
|
29天前
|
数据采集 存储 Rust
Rust高级爬虫:如何利用Rust抓取精美图片
Rust高级爬虫:如何利用Rust抓取精美图片