前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scrapy递归抓取简书用户信息

Scrapy递归抓取简书用户信息

作者头像
企鹅号小编
发布2018-01-26 17:19:20
1.3K0
发布2018-01-26 17:19:20
举报
文章被收录于专栏:大数据大数据

好久没有录制实战教程视频,大邓就在圣诞节后直接上干货。

之前写过一期【视频教程-用python批量抓取简书用户信息】的文章,是自己造的轮子,今天我趁着刚入门scrapy和xpath,操刀重写这个任务。

一、实战项目简介递归

我们要大批量获取简书网站上的用户数据,最直接的办法是给一个初识的用户url,从这个用户的关注的和粉丝中再抽取url,循环往复,周而复始。这其实就是递归。

数据项

获取到的url,我们需要对其进行请求,解析出想要的数据

昵称-nickname

关注数-followed

粉丝数- following

文章数-articles

文字数-charlength

喜欢数-likes

二、创建scrapy项目2.1 创建项目

2.2 生成爬虫

在terminal中我们要切换到项目文件夹中,在这里是JianShu文件夹,代码如下

然后生成爬虫,注意爬虫名不能与项目名相同。

scrapy genspider 爬虫名 域名

三、构建爬虫各功能模块

scrapy爬虫框架,概括起来是

spider下的爬虫脚本负责业务逻辑,发起请求,解析数据。

middleware负责对爬虫进行伪装或者加代理

item将爬虫脚本中的请求解析的数据封装到数据容器

并传递给pipeline以保存到csv、txt或者数据库中去。

settings存储项目各种参数

main主程序,运行开始爬数据

3.1 伪装请求头

一般为了让爬虫更健壮,我肯定不会跟网站说我是爬虫害虫,而是说我是好人,我来自浏览器人类的请求。

在scrapy中,我们先在settings.py中加入多个浏览器User-Agent,取消DOWNLOADER_MIDDLEWARES的前的注释。为了方便理解,我将里面的名字改成了HeadersMiddleware。

注意这里一定要DOWNLOADER_MIDDLEWARES字典中的value值写小一点,比如400。为了这个参数,我写好的没错的爬虫死活不运行,还总是403错误!!!!

然后在middleware.py中,定义我们的中间件。

3.2 item容器-整理数据

我们可以将item理解成存储数据的容器,类似于字典。只不过这个字典可以还有很多功能,可以在scrapy中飞来飞去的。挺神奇的。

3.3 pipeline-存储到csv文件中

数据库我不太熟,直接用csv这种人见人会的方式保存数据吧。

经过item整理后的数据,我们就可以通过pipeline保存到csv中去。

首先打开pipelines.py文件

再打开settings.py,取消ITEM_PIPELINES注释。让item与pipeline完美衔接,一个负责整理数据,一个负责保存数据。

四、编写爬虫

前面的所有工作都是准备工作,我个人喜欢先做前面,做好后再编写爬虫。看个人喜好,其实你们如果愿意,也可以先写爬虫再写item、pipeline、middleware、settings。

4.1 解析数据

注意,response.xpath()得到的是selector对象(而且是selector列表),selector对象有extract方法。所以

补充。

4.2 关注列表解析

上面的解析都是一个人的关注、粉丝、文章数等信息的提取。其实我们为了递归批量获取简书用户信息,还需要大量的用户url。

而大量的用户url,最好的来源便是从关注与粉丝对应的用户列表中解析。

经过抓包发现

整理汇总爬虫-jianshu.py

五、开始爬爬爬

为了方便测试,后期运行,我们在项目跟目录定制了main.py文件

5.1 main.py

直接在此更改,点击运行即可爬数据。

5.2 运行效果

5.3 代码下载地址

链接: https://pan.baidu.com/s/1o8kkF1K 密码: hmpj

支持大邓

数据采集文本处理分析

‍基于共现发现人物关系的python实现

图片数据处理其他

本文来自企鹅号 - 大邓带你玩python媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 大邓带你玩python媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档