如何使用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 相关文章推荐
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
用Python实现KNN分类算法
Dec 22 Python
wxpython实现图书管理系统
Mar 12 Python
python2.7安装图文教程
Mar 13 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
python中的句柄操作的方法示例
Jun 20 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
python 实现分组求和与分组累加求和代码
May 18 Python
Python虚拟环境venv用法详解
May 25 Python
Python ConfigParser模块的使用示例
Oct 12 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
php生成文件
2007/01/15 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
python数据结构之图的实现方法
2015/07/08 Python
分享vim python缩进等一些配置
2018/07/02 Python
Python中遍历列表的方法总结
2019/06/27 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
简历中的自我评价怎么写
2014/01/29 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
小学节能减排倡议书
2014/05/15 职场文书
2014年度培训工作总结
2014/11/27 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
施工安全协议书
2016/03/22 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis