前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python3爬虫】为什么你的博客没人

【Python3爬虫】为什么你的博客没人

作者头像
py3study
发布2020-01-17 12:16:30
3930
发布2020-01-17 12:16:30
举报
文章被收录于专栏:python3python3

我相信对于很多爱好和习惯写博客的人来说,如果自己的博客有很多人阅读和评论的话,自己会非常开心,但是你发现自己用心写的博客却没什么人看,多多少少会觉得有些伤心吧?我们今天就来看一下为什么你的博客没人看呢?

一、页面分析

首先进入博客园首页,可以看到一页有20篇博客简介,然后有200页,也就是说总共有20*200=4000篇博客。这时我们点击下一页,可以看到网页上的链接变成了https://www.cnblogs.com/#p2,看起来好像很简单--只需要改变#p后面的数字就好了,真的是这样吗?打开开发者工具,刷新页面,可以找到如下链接:

所携带的参数是这样的:

我们很容易就知道只需要改变PageIndex的数值就能实现翻页了。

二、解析网页

返回的结果如下图:

我们可以很方便的使用xpath来解析,相关代码如下:

代码语言:javascript
复制
1 et = etree.HTML(html)
2 title_list = et.xpath('//*[@class="post_item_body"]/h3/a/text()')  # 标题
3 author_list = et.xpath('//*[@class="post_item_foot"]/a/text()')  # 作者
4 time_list = et.xpath('//*[@class="post_item_foot"]/text()')  # 发布时间
5 read_list = et.xpath('//*[@class="post_item_foot"]/span[2]/a/text()')  # 阅读数
6 comment_list = et.xpath('//*[@class="post_item_foot"]/span[1]/a/text()')  # 评论数

这里得到的数据都是”发布于 2019-01-23 14:16“、”评论(0)“、”阅读(86)“这种,这样显然不利于我们对数据进行分析,所以还需要进行一下处理,相关代码如下:

代码语言:javascript
复制
1 # 处理数据
2 time_list = [i.strip().lstrip('发布于 ') for i in time_list if i.strip() != '']
3 comment_list = [int(i.strip().strip('评论(').rstrip(')')) for i in comment_list]
4 read_list = [int(i.strip().strip('阅读(').rstrip(')')) for i in read_list]

三、存储数据

这次我使用的数据库是MySQL数据库,首先创建一个数据表blogs,SQL代码如下:

create table if not exists blogs( title varchar(100) not null, author varchar(30) not null, rtime varchar(30) not null, readnum int(6) not null, commentnum int(6) not null);

然后就可以把爬取的数据都保存到数据库里,最后进入数据库查看一下:

 四、数据分析

大家都是几点写博客的呢?什么时候写的博客会被更多人看到呢?这里我们可以建一个字典dic1,一个数字代表一个小时,其对应的值就是这个小时里发布的博客的数量之和,如下:

dic1 = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, }

同理还可以建立一个一样的字典dic2,但是dic2中每个键的值是这个小时里发布的博客的阅读量之和。

由于一天的数据量比较小,也不能说明问题,然后通过查看数据库中的数据,可以知道最近的一篇博客是2019年1月22日写的,而最早的一篇的博客是2018-11-22日写的,所以我们可以把2018年12月整个月的数据提取出来进行分析,这样的话数据量不算少,得到的结果也就更有说服力。相关代码如下:

代码语言:javascript
复制
1  # 查看2018年12月的数据
2  day_list = ["2018-12-{}".format(str(i).zfill(2)) for i in range(1, 32)]
3  for day in day_list:
4     results = [i for i in all_data if day in i[0]]
5     for result in results:
6         t = int(result[0].split(' ')[1].split(':')[0])
7         dic1[t] += 1
8         dic2[t] += result[1]

最后根据结果绘制柱状图。

每小时发布的博客篇数:

每小时发布的博客阅读数:

从第一张图可以看到在早上9点-11点和下午3点-5点是发布博客的高峰期,在中晚饭时段也有不少人发博客,还有很多人选择在晚上下班之后写博客,比较意外的是凌晨三四点的时候也有人写博客,可以说是很厉害了。根据第二张图可以知道在早上8点-10点发的博客比较容易得到高阅读量,下午2点-5点也是比较不错的写博客的时间,而凌晨写博客的话就比较难被大家看到了,毕竟这个时候大多数人还在梦乡之中。要想你的博客被更多人看到和喜欢,除了选择一个合适的写博客的时间,最重要的就是用心写出一篇好的博客!

完整代码已上传到GitHub

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、页面分析
  • 二、解析网页
  • 三、存储数据
  •  四、数据分析
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档