好久没有录制实战教程视频,大邓就在圣诞节后直接上干货。
之前写过一期【视频教程-用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实现
图片数据处理其他