如何使用python爬取csdn博客访问量


Posted in Python onFebruary 14, 2016

最近学习了python和爬虫,想写一个程序练练手,所以我就想到了大家都比较关心的自己的博客访问量,使用python来获取自己博客的访问量,这也是后边我将要进行的项目的一部分,后边我会对博客的访问量进行分析,以折线图和饼图等可视化的方式展示自己博客被访问的情况,使自己能更加清楚自己的哪些博客更受关注,博客专家请勿喷,因为我不是专家,我听他们说专家本身就有这个功能。

一、网址分析

如何使用python爬取csdn博客访问量

进入自己的博客页面,网址为:http://blog.csdn.net/xingjiarong 网址还是非常清晰的就是csdn的网址+个人csdn登录账号,我们来看一下下一页的网址。

如何使用python爬取csdn博客访问量

看到第二页的地址为:http://blog.csdn.net/xingjiarong/article/list/2
后边的数字表示现在正处于第几页,再用其他的页面验证一下,确实是这样的,那么第一页为什么不是http://blog.csdn.net/xingjiarong/article/list/1呢,那么我们在浏览器中输入http://blog.csdn.net/xingjiarong/article/list/1试试,哎,果然是第一页啊,其实第一页是被重定向了,http://blog.csdn.net/xingjiarong被重定向到http://blog.csdn.net/xingjiarong/article/list/1,所以两个网址都能访问第一页,那么现在规律就非常明显了:
http://blog.csdn.net/xingjiarong/article/list/ + 页号

二、如何获取标题

右键查看网页的源代码,我们看到可以找到这样一段代码:

如何使用python爬取csdn博客访问量 

我们可以看到标题都是在标签

<span class="link_title"><a href="/xingjiarong/article/details/50651235">

所以我们可以使用下面的正则表达式来匹配标题:

<span class="link_title"><a href=".*?">(.*?)</a></span>

三、如何获取访问量

拿到了标题之后,就要获得对应的访问量了,经过对源码的分析,我看到访问量的结构都是这样的:

<span class="link_view" title="阅读次数"> <a href="/xingjiarong/article/details/50651235" title="阅读次数">阅读</a>(1140)</span>

括号中的数字即为访问量,我们可以用下面的正则表达式来匹配:

<span class="link_view".*?><a href=".*?" title="阅读次数">阅读</a>\((.*?)\)</span>

四、如何判断是否为尾页

接下来我们要判断当前页是否为最后一页,否则我们就不能判断什么时候结束了,我找到了源码中‘尾页'的标签,发现是下面的结构:

<a href="/xingjiarong/article/list/2">下一页</a> <a href="/xingjiarong/article/list/7">尾页</a>

所以我们可以用下面的正则表达式来匹配,如果匹配成功就说明当前页不是最后一页,否则当前页就是最后一页。

<a href=".*?">尾页</a>

五、编程实现

下面是完整的代码实现:

#!usr/bin/python
# -*- coding: utf-8 -*-
'''
Created on 2016年2月13日
@author: xingjiarong
使用python爬取csdn个人博客的访问量,主要用来练手
'''
import urllib2
import re
#当前的博客列表页号
page_num = 1
#不是最后列表的一页
notLast = 1
account = str(raw_input('输入csdn的登录账号:'))
while notLast:
#首页地址
baseUrl = 'http://blog.csdn.net/'+account
#连接页号,组成爬取的页面网址
myUrl = baseUrl+'/article/list/'+str(page_num)
#伪装成浏览器访问,直接访问的话csdn会拒绝
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent':user_agent}
#构造请求
req = urllib2.Request(myUrl,headers=headers)
#访问页面
myResponse = urllib2.urlopen(req)
myPage = myResponse.read()
#在页面中查找是否存在‘尾页'这一个标签来判断是否为最后一页
notLast = re.findall('<a href=".*?">尾页</a>',myPage,re.S)
print '-----------------------------第%d页---------------------------------' % (page_num,)
#利用正则表达式来获取博客的标题
title = re.findall('<span class="link_title"><a href=".*?">(.*?)</a></span>',myPage,re.S)
titleList=[]
for items in title:
titleList.append(str(items).lstrip().rstrip()) 
#利用正则表达式获取博客的访问量
view = re.findall('<span class="link_view".*?><a href=".*?" title="阅读次数">阅读</a>\((.*?)\)</span>',myPage,re.S)
viewList=[]
for items in view:
viewList.append(str(items).lstrip().rstrip())
#将结果输出 
for n in range(len(titleList)):
print '访问量:%s 标题:%s' % (viewList[n].zfill(4),titleList[n])
#页号加1
page_num = page_num + 1

下面是部分结果:

输入csdn的登录账号:xingjiarong
-----------------------------第1页---------------------------------
访问量:1821 标题:python编程常用模板总结
访问量:1470 标题:设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)
访问量:0714 标题:ubuntu14.04 安装并破解MyEclipse2014
访问量:1040 标题:ubuntu14.04 配置tomcat8
访问量:1355 标题:java调用python方法总结
访问量:0053 标题:Java多线程之Callable和Future
访问量:1265 标题:跟我学汇编(三)寄存器和物理地址的形成
访问量:1083 标题:跟我学汇编(二)王爽汇编环境搭建
访问量:0894 标题:跟我学汇编(一)基础知识
访问量:2334 标题:java多线程(一)Race Condition现象及产生的原因
访问量:0700 标题:Matlab矩阵基础
访问量:0653 标题:Matlab变量、分支语句和循环语句
访问量:0440 标题:Matlab字符串处理
访问量:0514 标题:Matlab运算符与运算
访问量:0533 标题:Matlab的数据类型
-----------------------------第2页---------------------------------
访问量:0518 标题:OpenStack设计与实现(五)RESTful API和WSGI
访问量:0540 标题:解决Android SDK Manager下载太慢问题
访问量:0672 标题:OpenStack设计与实现(四)消息总线(AMQP)
访问量:0570 标题:分布式文件存储FastDFS(五)FastDFS常用命令总结
访问量:0672 标题:分布式文件存储FastDFS(四)配置fastdfs-apache-module
访问量:0979 标题:分布式文件存储FastDFS(一)初识FastDFS
访问量:0738 标题:分布式文件存储FastDFS(三)FastDFS配置
访问量:0682 标题:分布式文件存储FastDFS(二)FastDFS安装
访问量:0511 标题:OpenStack设计与实现(三)KVM和QEMU浅析
访问量:0593 标题:OpenStack设计与实现(二)Libvirt简介与实现原理
访问量:0562 标题:OpenStack设计与实现(一)虚拟化
访问量:0685 标题:食堂买饭的启示
访问量:0230 标题:UML之时序图详解
访问量:0890 标题:设计模式之桥梁模式和策略模式的区别
访问量:1258 标题:设计模式(十二)责任链模式

总结:

使用python编写爬虫,我个人总结了以下的步骤:

1、分析要抓取的网址特征,以确定如何生成相关网页的网址,如果只爬取一个网页,则这一步可以省略。

2、查看网页的源码,分析自己想要爬取的内容所在的标签的特征。

3、使用正则表达式从源码中将自己想要的部分抠出来。

4、编程实现。

以上内容是针对如何使用python爬取csdn博客访问量的相关知识,希望对大家有所帮助。

Python 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
Python数据结构之单链表详解
Sep 12 Python
python实现Windows电脑定时关机
Jun 20 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
Python缓存技术实现过程详解
Sep 25 Python
Python使用configparser库读取配置文件
Feb 22 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
pytorch查看模型weight与grad方式
Jun 24 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
浅析NumPy 切片和索引
Sep 02 Python
详解anaconda离线安装pytorchGPU版
Sep 08 Python
python动态网页批量爬取
Feb 14 #Python
Python ftp上传文件
Feb 13 #Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 #Python
Python批量创建迅雷任务及创建多个文件
Feb 13 #Python
Python 中 Meta Classes详解
Feb 13 #Python
教大家使用Python SqlAlchemy
Feb 12 #Python
理解Python垃圾回收机制
Feb 12 #Python
You might like
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
用户注册常用javascript代码
2009/08/29 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
vue-resourc发起异步请求的方法
2020/02/11 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
遍历python字典几种方法总结(推荐)
2016/09/11 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
求职简历的自我评价怎样写好
2013/10/07 职场文书
什么是岗位职责
2013/11/12 职场文书
新闻学毕业生自荐信
2013/11/15 职场文书
策划创业计划书
2014/02/06 职场文书
小学信息技术教学反思
2014/02/10 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
预备党员介绍人意见
2015/06/01 职场文书
在职证明书模板
2015/06/15 职场文书
大学生活感想
2015/08/10 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python