为了统计csdn个人博客文章字数,之前已经学习并测试了获取文章字数、获取博客文章清单、python操作excel文件等内容,基本上可以拼凑起一个基本的统计程序。
合并之前三篇文章中的测试代码,并将获取文章字数的代码封装为函数,同时创建保存统计结果的excel文件。完整的程序代码及运行效果如下图所示:
# coding=gbk
from bs4 import BeautifulSoup
import urllib.request
from openpyxl import load_workbook
def getblogpagecharcount(url):
response = urllib.request.urlopen(url)
soup1=BeautifulSoup(response.read(), "lxml")
result=soup1.article.find_all('p')
textlengh=0
for p in result:
textlengh+=len(p.text.strip())
return textlengh
path = r"E:\MyPrograms\Python\csdn\result.xlsx"
wb = load_workbook(path)
sheet=wb.active
for pageIndex in range(1,17):
pageUrl="https://blog.csdn.net/gc_2299/article/list/"+str(pageIndex)
print('processing:'+pageUrl)
response = urllib.request.urlopen(pageUrl)
soup1=BeautifulSoup(response.read(), "lxml")
result=soup1.select("div[class='article-item-box csdn-tracking-statistics']")
for p in result:
bDate=p.select_one("span[class='date']")
print("文章:%s,地址:%s" % (p.h4.text.strip(p.h4.span.text+" \n"),p.h4.a['href']))
sheet.append([p.h4.span.text,bDate.text,p.h4.text.strip(p.h4.span.text+" \n"),p.h4.a['href'],getblogpagecharcount(p.h4.a['href'])])
wb.save(path)
print("done")
统计结果如下图所示,近几年在csdn写的博客基本都能把字数统计出来,但是之前在其它博客网站编写的并迁移到csdn中的博客,有一部分文章的字数没有统计出来。
找了几个典型的统计的字数为0的页面,查看源码发现其保存内容的格式通过soup1.article.find_all(‘p’)找不出来,其内容保存在div或span里面,不过主要都是2017年时的文章,可以不考虑。
后续将继续学习如何将excel中的统计结果保存到数据库中。
参考文献:
[1]Python从菜鸟到高手