肯德基竟无鸡可炸?Scrapy爬虫知乎评论,看看网友们怎么说?
嗨!大家好,我是酷头
欢迎来到学习python的宝藏基地~~~
文末赠送Python web书籍!
今天摸鱼的时候发现之乎热榜的一条劲爆消息,肯德基、麦当劳等快餐企业竟然无鸡可炸?
鸡都去哪了?我想这个标题更适合今天文章的内容
为了探究原因我们使用scrapy抓一下评论区的大神评论,看看他们是如何看待这一事件的
目标获取
我们的目标很简单,抓取知乎该话题下的作者首页、作者名称、作者座右铭、
评论点赞数和评论时间以及评论内容并将其保存做可视化分析。
创建scrapy project
创捷结果展示如下:
网页分析
我们在评论区F12快捷打开开发者模式,找到评论内容所在的位置,如下:
想要抓取数据必须先要了解数据的存储结构。
如上图:我们可以很直观地看到数据是存储在一个名为data的json数据结构中。
接下来就很简单了,上代码!
items定义
我们刚才已经清楚了我们想要获取的数据,接下来我们先要在items中定义我们要获取的数据。
# 作者首页
home_page = scrapy.Field()
# 作者名称
name = scrapy.Field()
# 作者座右铭
motto = scrapy.Field()
# 评论时间
cmt_time = scrapy.Field()
# 评论点赞数
stars = scrapy.Field()
# 评论内容
comments = scrapy.Field()
发送请求
def parse(self, response):
zhihu = response.json()['data']
ic(zhihu)
成功获取到数据之后我们进一步提取data列表中我们的目标数据
for zh in zhihu:
# 作者首页
item['home_page'] = 'https://www.zhihu.com/people/' + zh['author']['member']['url_token']
# 作者名称
item['name'] = zh['author']['member']['name']
# 作者座右铭
item['motto'] = zh['author']['member']['headline']
# 评论时间
cmt_time = zh['created_time']
item['cmt_time'] = time.strftime('%Y-%m-%d %H:%M', time.localtime(cmt_time)).split(' ')[0]
# 评论点赞数
item['stars'] = zh['vote_count']
# 评论内容
item['comments'] = zh['content']
yield item
需求现在已经实现,我们现在要做的就是将数据抛给pipeline,让他自行去下载,这一步scrapy已经写好了,我们只需打开开关即可
ITEM_PIPELINES = {
'zhihu.pipelines.ZhihuPipeline': 300,
}
多页获取
https://www.zhihu.com/api/v4/answers/2140770635/root_comments?order=normal&limit=20&offset=40&status=open
https://www.zhihu.com/api/v4/answers/2140770635/root_comments?order=normal&limit=20&offset=60&status=open
https://www.zhihu.com/api/v4/answers/2140770635/root_comments?order=normal&limit=20&offset=80&status=open
for page in range(1, 20 + 1):
url = f'https://www.zhihu.com/api/v4/answers/2140770635/root_comments?order=normal&limit=20&offset={(page-1)*20}&status=open'
数据保存
老规矩我们依旧使用的是openpyxl将数据保存到excel,你也可以选择csv等保存方式。根据个人需求。
我们在pipeline中写一个函数用于专门保存数据
class ExcelPipeline:
wb = op.Workbook()
ws = self.wb.active
ws.append(['作者首页', '作者名称', '作者座右铭', '评论时间', '评论点赞数', '评论内容'])
line = [item['home_page'], item['name'], item['motto'], item['cmt_time'], item['stars'], item['comments']]
self.wb.save('../知乎.xlsx')
print('知乎数据成功保存!')
执行scrapy可以发现会生成一个知乎.xlsx,部分数据如下:
词频可视化
这里我们使用熊猫来读取数据,并去除空行。使用jieba制作分词
有兴趣的小伙伴可以参考
知乎评论出现频率最高的前十个词分别如下:
词云可视化
我们使用stylecloud来绘图结果展示如下:
有兴趣的小伙伴可以参考:
评论点赞最多
我们使用pandas找出点赞第一的评论如下:
pd_data = pd.read_excel('../知乎.xlsx')
# 最多点赞数
max_star = pd_data[pd_data['评论点赞数'] == pd_data['评论点赞数'].max()]
'''
作者首页 作者名称 作者座右铭 评论时间 评论点赞数 评论内容
44 https://www.zhihu.com/people/captain-li-19 王心猿 小仙女,出轻语。纱光蝈蝻扬仁娶。 2021-09-26 1475 人造肉啊,环保啊[惊喜]
'''
情感分析
pinglun = '人造肉啊,环保啊'
Sentiment_analysis = SnowNLP(pinglun).sentiments
'''
0.31887340003004505
'''
得到的情感值为 0.31887340003004505,情感值较低
说明大家对此还是身有顾虑的!
对此,你有什么看法?
送书啦
【内容简介】
有兴趣的小伙伴也可以点击下方链接购买:
送书规则
送书方式:本次共包邮送书2本,1本抽奖送出,1本留言送出。
抽奖送一本:公众号【GOGO数据】回复【抽书吧】即可参与抽奖
留言送一本:在本文下面留言,主题:说说你对python web的一些简单认识或者想法?
开奖时间:2021年10月07日20:00,开奖后12小时内未与我联系视为放弃,逾期不候。
抽奖规则:
1.截止日前需要给本文点赞+在看,领奖时需要提供截图,否则无效
2. 参与本次活动的读者需在活动截止前添加老邓好友,否则中奖无效!
3.30天之内中过奖的读者不参与此次活动!
4.每人限得一本!