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

一、页面分析

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

所携带的参数是这样的:

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

二、解析网页

返回的结果如下图:

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

 et = etree.HTML(html)
title_list = et.xpath('//*[@class="post_item_body"]/h3/a/text()') # 标题
author_list = et.xpath('//*[@class="post_item_foot"]/a/text()') # 作者
time_list = et.xpath('//*[@class="post_item_foot"]/text()') # 发布时间
read_list = et.xpath('//*[@class="post_item_foot"]/span[2]/a/text()') # 阅读数
comment_list = et.xpath('//*[@class="post_item_foot"]/span[1]/a/text()') # 评论数

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

 # 处理数据
time_list = [i.strip().lstrip('发布于 ') for i in time_list if i.strip() != '']
comment_list = [int(i.strip().strip('评论(').rstrip(')')) for i in comment_list]
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月整个月的数据提取出来进行分析,这样的话数据量不算少,得到的结果也就更有说服力。相关代码如下:

  # 查看2018年12月的数据
day_list = ["2018-12-{}".format(str(i).zfill(2)) for i in range(1, 32)]
for day in day_list:
results = [i for i in all_data if day in i[0]]
for result in results:
t = int(result[0].split(' ')[1].split(':')[0])
dic1[t] += 1
dic2[t] += result[1]

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

每小时发布的博客篇数:

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

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

完整代码已上传到GitHub!

【Python3爬虫】为什么你的博客没人看呢?的更多相关文章

  1. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  2. 【java爬虫】---爬虫+jsoup轻松爬博客

    爬虫+jsoup轻松爬博客 最近的开发任务主要是爬虫爬新闻信息,这里主要用到技术就是jsoup,jsoup 是一款 Java的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非 ...

  3. Python爬虫简单实现CSDN博客文章标题列表

    Python爬虫简单实现CSDN博客文章标题列表 操作步骤: 分析接口,怎么获取数据? 模拟接口,尝试提取数据 封装接口函数,实现函数调用. 1.分析接口 打开Chrome浏览器,开启开发者工具(F1 ...

  4. 没人看系列-----html随笔

    <!DOCTYPE> 目录 没人看系列-----html/css详解 前言 不多说这段时间写了好多好多前端的东西,以至于自己重新返回看了一遍前端的所有技术.故此做个总结,准备学东西的请绕行 ...

  5. 没人看系列----css 随笔

    目录 没人看系列----css 随笔 没人看系列----html随笔 前言 没什么要说的就是自己总结,学习用的如果想学点什么东西,请绕行. CSS (Cascading Style Sheets)层叠 ...

  6. 写博客没高质量配图?python爬虫教你绕过限制一键搜索下载图虫创意图片!

    目录 前言 分析 理想状态 爬虫实现 其他注意 效果与总结 @(文章目录) 前言 在我们写文章(博客.公众号.自媒体)的时候,常常觉得自己的文章有些老土,这很大程度是因为配图没有选好. 笔者也是遇到相 ...

  7. JAVA爬虫挖取CSDN博客文章

    开门见山,看看这个教程的主要任务,就去csdn博客,挖取技术文章,我以<第一行代码–安卓>的作者为例,将他在csdn发表的额博客信息都挖取出来.因为郭神是我在大学期间比较崇拜的对象之一.他 ...

  8. 博客没内容可写了怎么办?找BD!

    博客写了一段时间可能会感觉没内容可以写了,或者说同一个领域的内容写多了感觉有点千篇一律,这时要考虑扩展自己的写作领域,怎么去扩展呢?利用关键词工具可以衍生很多长尾词,当然这个有点牵强,有点为优化而优化 ...

  9. “希希敬敬对”团队--‘百度贴吧小爬虫’Alpha版本展示博客

    希希敬敬对的 Alpha阶段测试报告 随笔链接地址 https://www.cnblogs.com/xiaoyoushang/p/10078826.html   Alpha版本发布说明 随笔链接地址 ...

随机推荐

  1. 在C++遇到有些关键字或者函数被弃用的情况

    随着每一次C++的不断更新,可能都会有些函数或者关键字会被弃用,或者换成了其他的名字,这在编写代码的时候经常会碰到,碰到这种情况,可以在代码的第一行写上忽略此错误的句子,一般为: #pragma  w ...

  2. 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯

    Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...

  3. 从Xilinx FFT IP核到OFDM

    笔者在校的科研任务,需要用FPGA搭建OFDM通信系统,而OFDM的核心即是IFFT和FFT运算,因此本文通过Xilinx FFT IP核的使用总结给大家开个头,详细内容可查看官方文档PG109.关于 ...

  4. Django中Middleware中间件

    Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...

  5. Java基础-方法重载和方法重写的区别

    什么是java方法重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2)  ...

  6. mysql5.7安装和修改密码

    mysql5.7安装 第一 下载 https://downloads.mysql.com/archives/community/ 首先下载mysql5.7.18zip安装包 根据电脑配置选择32/64 ...

  7. ReentrantLock之非公平锁源码分析

    本文分析的ReentrantLock所对应的Java版本为JDK8. 在阅读本文前,读者应该知道什么是CAS.自旋. 由于ReentrantLock的公平锁和非公平锁中有许多共同代码,本文只会对这两种 ...

  8. SprintBoot的@ComponentScan“踩坑”

    主要的话说在前面:在启动日志中没有看到Controller对应的URL被映射,那么请检查你的Controller是否被Spring管理了.此次踩坑就是忘了SpringBoot在没配置@Componen ...

  9. C#-Xamarin的Android项目开发(二)——控件应用

    相信我,这不是一篇吐槽文章.... 基础控件 Android的控件和控件样式非常特别,它是一种内联特别高的设计模式,换句话说,它是非常烂的设计.... 但在这种特别的关系里还是有一定的规律的,下面我们 ...

  10. SpringBoot SpEL表达式注入漏洞-分析与复现

    目录 0x00前言 0x01触发原因 0x02调试分析 0x03补丁分析 0x04参考文章 影响版本: 1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升至1.3.1或以上版本 ...