如何使用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判断给定的字符串是否是有效日期的方法
May 13 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
python配置grpc环境
Jan 01 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
python批量处理文件或文件夹
Jul 28 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
python实现简单的名片管理系统
Apr 26 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实现简单的上传进度条
2015/11/17 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
Python判断有效的数独算法示例
2019/02/23 Python
python中的print()输出
2019/04/12 Python
师德师风承诺书
2014/05/23 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
群众路线调研报告范文
2014/11/03 职场文书
警示教育观后感
2015/06/17 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL