【Python3爬蟲】為什麼你的博客沒人看呢?

来源:https://www.cnblogs.com/TM0831/archive/2019/01/24/10308894.html
-Advertisement-
Play Games

我相信對於很多愛好和習慣寫博客的人來說,如果自己的博客有很多人閱讀和評論的話,自己會非常開心,但是你發現自己用心寫的博客卻沒什麼人看,多多少少會覺得有些傷心吧?我們今天就來看一下為什麼你的博客沒人看呢? 一、頁面分析 首先進入博客園首頁,可以看到一頁有20篇博客簡介,然後有200頁,也就是說總共有2 ...


我相信對於很多愛好和習慣寫博客的人來說,如果自己的博客有很多人閱讀和評論的話,自己會非常開心,但是你發現自己用心寫的博客卻沒什麼人看,多多少少會覺得有些傷心吧?我們今天就來看一下為什麼你的博客沒人看呢?

 

一、頁面分析

首先進入博客園首頁,可以看到一頁有20篇博客簡介,然後有200頁,也就是說總共有20*200=4000篇博客。這時我們點擊下一頁,可以看到網頁上的鏈接變成了https://www.cnblogs.com/#p2,看起來好像很簡單--只需要改變#p後面的數字就好了,真的是這樣嗎?打開開發者工具,刷新頁面,可以找到如下鏈接:

所攜帶的參數是這樣的:

我們很容易就知道只需要改變PageIndex的數值就能實現翻頁了。

 

二、解析網頁

返回的結果如下圖:

 

我們可以很方便的使用xpath來解析,相關代碼如下:

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)“這種,這樣顯然不利於我們對數據進行分析,所以還需要進行一下處理,相關代碼如下:

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月整個月的數據提取出來進行分析,這樣的話數據量不算少,得到的結果也就更有說服力。相關代碼如下:

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 要開始寫Vue的功能了,是不是很激動呢!開始吧! 1、首先建立一個html頁面,導入Vue js包 1 <script type="text/javascript" src="js/vue.min.js"></script> 2、架包導入之後,我們需要創建一個Vue對象,用來綁定元素節點,從而達到操 ...
  • 作為一個後臺開發人員,幾年前參與過Ionic1開發過一微信公眾號的經歷,所以這次開發企業微信應用,就使用了ionic,正好ionic4 rc版本發佈,雖然不是正式版,作為本項目的項目經理,還是決定使用ionic4開發,因為項目組員也是我。簡單記錄一下本次開發的過程,很多命令不經常輸入,就忘記了。 0 ...
  • 一. 範圍不同 readonly 只對 <input> 和 <textarea> 標簽有效 disabled 對所有表單元素都有效, 包括:<input>, <textarea>, <button>, <label>, <option>, <select>等 二. 程度不同 readonly 只是將 ...
  • 昨天碰到這樣一個場景,調用後端介面返回的數據發現所有數據都是正常的,只有一個商品ID的最後兩位是錯的,每一個商品都是,導致無法進行商品的上下架和刪除, 經過查資料發現: 瀏覽器解析數字的坑,一旦超出一定長度最後兩位會精度失準變為兩位隨機數,所以出現這種問題先列印出來 typeof(出錯的數字欄位), ...
  • 一、需求背景: 二、Dubbo和Spring Cloud 的比較 首先Dubbo是一個分散式服務框架,以及SOA治理方案。它的功能主要包括:高性能NIO通訊及多協議集成,服務動態定址與路由,軟負載均衡與容錯,依賴分析與降級等,它是著名的阿裡服務治理的核心框架。Spring Cloud更加關心為開發人 ...
  • 一個分散式服務集群管理通常需要一個協調服務,提供服務註冊、服務發現、配置管理、組服務等功能,而協調服務自身應是一個高可用的服務集群,ZooKeeper是廣泛應用且眾所周知的協調服務。協調服務自身的高可用需要選舉演算法來支撐,本文將講述選舉原理並以分散式服務集群NebulaBootstrap的協調服務N ...
  • 其旨在打造一個集應用開發、大數據存儲、處理、分散式計算、自動化部署的無節點微服務集中開發與運行平臺,以響應業務的快速變更,滿足系統對大數據,大併發與開發效率的需求; 平臺設計以數據為核,以groovy腳本為基礎,通過提供api、非同步消息處理、調度等基礎構件來支持應用的快速開發; 核心是通過整合現有開 ...
  • 對象實例化過程: 1.看類是否已載入,未載入的話先初始化類。 2.在堆記憶體中分配空間。 3.初始化父類的屬性 4.初始化父類的構造方法 5.初始化子類的屬性 6.初始化子類的構造方法 實例: package com.xm.load; public class Animal { static Stri ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...