之前一直想统计每年博客大致写了多少字数,但是csdn中好像只有文章数统计,没有字数统计(或者是一直没有发现相关的功能)。最近学习python的网络相关模块时,python关于网页读取及抓取网页内容方面的功能比较强大及简便,于是想试试编写python脚本进行字数统计。
参考文献2-3中介绍的基本抓取网页内容的思路是通过分析网页结构,用正则表达式匹配要抓取的内容,不过文献后面又介绍了使用BeautifulSoup提取数据的方式,后者使用起来更简单,本文使用BeautifulSoup获取网页内容。根据参考文献1,采用以下命令安装beautifulsoup4及HTML解析器(参考文献1中推荐安装lxml)
pip install beautifulsoup4
pip install lxml
通过分析csdn网页源码,发现博客主要内容包含在article标签内(查看了多篇csdn文章,都是在articls内),如下图所示。
于是统计单个博客文章字数的思路主要是读取网页内容->查找articls标签->获取标签内文本内容->计算字符串数量。由于是初步试手,暂时先不考虑精确计算,本人的文章中主要以文字为主,所以暂时想的是找出articles标签中的段落,忽略其它标签,计算段落内容总字符数(暂时将图片地址也作为文字)。
BeautifulSoup的构造函数包括2个参数,第一个参数是文档字符串或是文件句柄,第二个参数是文档解析器。BeautifulSoup不支持直接指定网址,为此需要使用urllib模块中的urlopen打开网页后传入BeautifulSoup。
代码比较简单,主要代码如下:
from bs4 import BeautifulSoup
import urllib.request
response = urllib.request.urlopen("https://blog.csdn.net/gc_2299/article/details/124464082?spm=1001.2014.3001.5501")
soup1=BeautifulSoup(response.read(), "lxml")
print(soup1.title)
print(soup1.title.text)
result=soup1.article.find_all('p')
textlengh=0
for p in result:
textlengh+=len(p.text.strip())
print(textlengh)
代码中的网址是前几天翻译的文档,编辑状态下看到的字数是1829,使用程序计算的结果是1847,相差不算太大,程序的执行结果如下图所示:
再找另一篇《(翻译)表单中电话号码字段的不良设计》测试,该文编辑状态下的字数是1451,使用程序计算的结果是1439,也还凑合。
总的来说,计算精度还有待提高,后续接着学习怎么从博客主页获取一年的文章清单。
参考文献:
[1]https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id8
[2]Python从菜鸟到高手
[3]python基础教程