python统计csdn博客文章清单

  上篇文章学习了如何统计csdn单篇博客文章的内容字数,本文学习如何统计csdn个人博客中的文章清单,包括文章类型(原创、翻译)、发表时间、文章名称、链接地址等信息。使用的模块还是BeautifulSoup和urllib。总共尝试了3种方式,分别记录如下。

从内容管理页面种抓取

  csdn个人博客的内容管理种列出了个人发布的所有博客文章,如下图所示。最初想从这个页面种抓取内容,但是查看网页源码后,发现其中的内容并不是预想的网页结构,看不懂里面的内容,只好作罢,另想它法。
在这里插入图片描述
在这里插入图片描述

从个人博客主页抓取

  登录个人博客主页会看到发布的文章信息,而且鼠标滚动到页面底部时,会自动加载之前发布的文章。查看个人博客主页的网页源码,其结构如下图所示(内容太宽,只截了一部分):
在这里插入图片描述
  从网页源码中可以看出如下规律:

  • 一条文章记录对应一个class值为blog-list-box的article标签;
  • article标签内,class值为article-type的div标签保存文章类型,其中值为article-type article-type-yc是原创文章,值为article-type article-type-fy是翻译文章;
  • article标签内,class值为view-time-box的div标签保存发布时间;
  • article标签内,h4标签内保存的是文章标题;
  • article标签内,a标签内href属性保存的是文章链接。

  基于上述内容,编写了最初的python博客文章清单抓取程序,主要代码及程序运行效果如下(代码比较简陋,仅供参考):

# coding=gbk

from bs4 import BeautifulSoup
import urllib.request

response = urllib.request.urlopen("https://blog.csdn.net/gc_2299")
soup1=BeautifulSoup(response.read(), "lxml")

result=soup1.select("article[class='blog-list-box']")

for p in result:
    bDate=p.select_one("div[class='view-time-box']")
    if(p.select_one("div[class='article-type article-type-yc']")):
        print("类型:原创,创建日期:%s,文章:%s,地址:%s" % (bDate.text,p.h4.text,p.a['href']))
    elif(p.select_one("div[class='article-type article-type-fy']")):
        print("类型:翻译,创建日期:%s,文章:%s,地址:%s" % (bDate.text,p.h4.text,p.a['href']))

在这里插入图片描述
  上述程序的问题,一个是显示格式不对,一条记录换了好几行;还有一个是只能抓取个人博客主页默认显示的文章清单,目前不知道该怎么触发页码自动加载之前的文章清单。所以只能再找其它方法

从博客文章列表页码抓取

  查看csdn个人博客主页的网页源码过程中,发现最下方有个class值为item-loading的div,应该是跟鼠标滚动到底部时自动加载内容有关,其标签内的链接为https://blog.csdn.net/gc_2299/article/list/2,该地址应该就是个人博客的文章列表页面。
在这里插入图片描述
  打开上述网址,并跳转到第一页,其页面内容及网页源码如下所示:
在这里插入图片描述
在这里插入图片描述
  从网页源码中可以看出如下规律:

  • class值为article-list的div内保存页面中所有的文章清单;
  • 一条文章记录对应一个class值为article-item-box csdn-tracking-statistics的div标签;
  • 文章div标签内,class值为date的span标签保存文章发布时间;
  • article标签内,h4标签内保存的是文章标题,其中h4标签内的span标签保存文章类型,a标签的href属性保存的是文章链接;

  基于上述内容,编写了第二版python博客文章清单抓取程序,主要代码及程序运行效果如下(代码比较简陋,仅供参考):

# coding=gbk

from bs4 import BeautifulSoup
import urllib.request

response = urllib.request.urlopen("https://blog.csdn.net/gc_2299/article/list/1")
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,文章:%s,地址:%s" % (p.h4.span.text,bDate.text,p.h4.text.strip(p.h4.span.text+" \n"),p.h4.a['href']))

在这里插入图片描述
  目前个人博客文章总共15页,可以通过for循环拼url地址方式循环抓取每页中的文章清单,具体代码在此不再讨论。
  目前已经可以将文章类型(原创、翻译)、发表时间、文章名称、链接地址等信息抓取到,后续将学习如何将信息保存到本地文件或数据库中,以便后续进一步处理。

参考文献
[1]https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/index.html#
[2]https://blog.csdn.net/qq_41694291/article/details/107903018
[3]https://blog.csdn.net/qq_43673981/article/details/115541827

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值