查看原文
其他

肯德基竟无鸡可炸?Scrapy爬虫知乎评论,看看网友们怎么说?

酷头酷头 印象Python 2022-08-01
文 | 酷头
来源:印象python「ID: python_logic」

嗨!大家好,我是酷头

欢迎来到学习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()




发送请求


找到网页请求的真实链接,如下。然后我们使用scrapy在spider_zhihu.py文件中发送请求


为了防止被网站反爬,我们还需加上三件套如下:


我们打印所有的data数据如下:
  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

每页数据展示数目由limit=20控制;翻页参数由page控制。
所以我们多页链接构造如下:
for page in range(120 + 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等保存方式。根据个人需求。

我是如何把python爬虫获取到的数据写入Excel的?


我们在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制作分词

有兴趣的小伙伴可以参考

让人无法拒绝的pandas技巧,简单却好用到爆!


知乎评论出现频率最高的前十个词分别如下:



词云可视化


我们使用stylecloud来绘图结果展示如下:

有兴趣的小伙伴可以参考:

如何使用python实现一个优雅的词云?(超详细)






评论点赞最多


我们使用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  人造肉啊,环保啊[惊喜]
  '''




情感分析


我们以点赞最多评论为例分析观众对知乎的一些看法进行简单分析
我们是使用的库是SnowNLP

SnowNLP是一个基于Python的情感分析工具库,可以进行中文分词、词性标注、情感分析、文本分类、文本关键词提取等。
SnowNLP的情感值取值范围为0到1之间,值越大,说明情感倾向越积极。
  pinglun = '人造肉啊,环保啊'
  Sentiment_analysis = SnowNLP(pinglun).sentiments
  
  '''
  0.31887340003004505
  '''


得到的情感值为 0.31887340003004505,情感值较低

说明大家对此还是身有顾虑的!


对此,你有什么看法?


印象python】交流群正式开放啦!
欢迎扫码添加老邓好友,通过后拉你入群。



送书啦


推荐《Python Web开发从入门到精通》,送2本,由北大出版社赞助。



内容简介


本书分为3部分:
基础篇,带领初学者实践Python开发环境和掌握基本语法,同时对网络协议、Web客户端技术、数据库建模编程等网络编程基础深入浅出地进行学习;

框架篇,学习当前*流行的Python Web框架,即Django、Tornado、Flask和Twisted,达到对各种Python网络技术融会贯通的目的;

实战篇,分别对几种常用WEB框架进行项目实践,利用其各自的特点开发适用于不同场景的网络程序。本书内容精练、重点突出、实例丰富、讲解通俗,是广大网络应用设计和开发人员不可多得的一本参考书,同时非常适合大中专院校师生学习和阅读,也可作为高等院校计算机及相关培训机构的教材。


有兴趣的小伙伴也可以点击下方链接购买:



送书规则


送书方式:本次共包邮送书2本,1本抽奖送出,1本留言送出。


抽奖送一本:公众号【GOGO数据】回复【抽书吧】即可参与抽奖


留言送一本:在本文下面留言,主题:说说你对python web的一些简单认识或者想法?


开奖时间:2021年10月07日20:00,开奖后12小时内未与我联系视为放弃,逾期不候。


抽奖规则:

1.截止日前需要给本文点赞+在看,领奖时需要提供截图,否则无效

2. 参与本次活动的读者需在活动截止前添加老邓好友,否则中奖无效!

3.30天之内中过奖的读者不参与此次活动!

4.每人限得一本!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存