python网络爬虫 新浪博客篇
上次写了一个爬世纪佳缘的爬虫之后,今天再接再厉又写了一个新浪博客的爬虫。写完之后,我想了一会儿,要不要在博客园里面写个帖子记录一下,因为我觉得这份代码的含金量确实太低,有点炒冷饭的嫌疑,就是把上次的代码精简了一下,用在另外一个网站而已,而且爬别人的博客总有一种做贼心虚的感觉,怕被各位园友认为是偷窥狂魔。但是这份代码总归是我花了精力去写的,我也不想就此让它深藏在硬盘之中(电脑实在太老了,可能过两年硬盘坏了,这份代码就消失了),还是贴出来权当作抛砖引玉。
说起要爬新浪博客,总归是有一个原因吧。我的原因呢也是什么的简单,就是这两天在网上下载了一本python自然语言处理的一本书,就像尝试着应用一下里面的理论(其实我都还没看呢 哈哈),当然照着书里面的例子玩总归是没什么成就感的,所以就想自己找点东西实验一下。可能你觉得这个原因和爬新浪博客没什么必然联系啊,确实如此,前面扯的东西太虚了,我写这个东西就是为了满足一下自己的偷窥欲望,把曾经女神的博客都下载下来(大家不要喷。。),顺便在用前面讲的高大上的自然语言理论处理一下(估计很难,八成做不下去)。
讲了这么多废话了,现在开始说一说爬虫的工作原理。先原谅我粗糙的涂抹技术,因为实在不想把再出现上次帖子中的情况,大家纷纷在评论中讨论我在知乎看什么。首先在新浪播客找到你要下载用户的主页,在地址栏中最后一般有一个数字对应于用户的id,因为每页放的文章有限,新浪博客采用了分页,对应于url里面的page=2,就是第二页的意思。在当前的页面我们可以用正则表达式解析出文章的发表时间,“查看原文”的链接中找到文章的链接。

因为新浪博客比较开放的原因,不登陆也能查看文章那个的内容,所以就直接用python里的urllib2,也不需要设置cookies,省去了很多麻烦。唯一比较麻烦的是如果文章里面有图片是多媒体的链接,提取里面的文字比较麻烦和繁琐,因为这个界面比较简单,当然也可以直接解析html,不过我已经习惯了正则表达式,虽然很麻烦,但还是硬着头皮写完了。其中正则表达式的替换字符串的功能非常的好用,就重点讲一讲这个吧!
在遇到复杂的字符串替换的时候,正则表达式的sub函数用起来非常的easy。贴一段简单的代码:
#-*- encoding:UTF-8 -*-
import re s = u'''<div class="class1">this is string1</div>
<div class="class2">这是字符串二</DIV>''' def div_func(m):
if m is None:
return ''
return m.group(1) if __name__ == '__main__':
pattern = re.compile(u'<div[\S ]*?>(.*?)</div>', re.U | re.S | re.I)
print s
sss = pattern.sub(div_func, s)
print sss
在网页中,会碰到很多不同的格式,如代码里面的字符串s,如果想把里面的文字提取出来,对于比较复杂的替换要求,我们可以定义一个函数作为参数传给sub进行处理,运行的结果如下图所示,是不是非常的方便?

再讲讲python的中文编码问题吧,最简单的处理就是尽可能少的用str,尽可能多的用unicode。对于来自文件的输入数据,最好先解码为unicode再做处理,这样可以减少90%的乱码问题。哦,对了,今天还发现了一个非常好用的一个函数,可以用来下载文件
import urllib
urllib.urlretrieve(url, path)
此函数可以将url中的文件下载到本地路径path中,是不是非常的简单。最后展示一下。当然数据不多啦,女神也就一百多篇的文章,用数据库有点杀鸡用牛刀的感觉,直接输出到一个文本文件里面也是挺方便的哈!

最后的最后,还是把源代码贴出来以供大家参考哈!(由于本人实在不擅长描述细节,所以写的很粗,望大家多多见谅啊!)
链接:http://files.cnblogs.com/files/lrysjtu/xlblog.rar
python网络爬虫 新浪博客篇的更多相关文章
- Python爬虫爬取一篇韩寒新浪博客
网上看到大神对Python爬虫爬到非常多实用的信息,认为非常厉害.突然对想学Python爬虫,尽管自己没学过Python.但在网上找了一些资料看了一下,看到爬取韩寒新浪博客的视频.共三集,第一节讲爬取 ...
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...
- python中multiprocessing.pool函数介绍_正在拉磨_新浪博客
python中multiprocessing.pool函数介绍_正在拉磨_新浪博客 python中multiprocessing.pool函数介绍 (2010-06-10 03:46:5 ...
- python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客
python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客 python datetime模块strptime/strptime form ...
- python中逐行读取文件的最佳方式_Drupal_新浪博客
python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式 (2010-08-18 15:59:28) 转载▼ 标签: python ...
- python—webshell_醉清风xf_新浪博客
python—webshell_醉清风xf_新浪博客 python—webshell (2012-05-23 09:55:46) 转载▼
- Word直接发布新浪博客(以Wo…
原文地址:Word直接发布新浪博客(以Word 2013为例)作者:paulke2011 注意:这篇博客直接由Word 2013发出!这虽然也算是一个教程,但更多的是一个试验品. 老早就知道Word有 ...
- [转载]Word直接发布新浪博客(以Word 2013为例)
原文地址:Word直接发布新浪博客(以Word 2013为例)作者:paulke2011 注意:这篇博客直接由Word 2013发出!这虽然也算是一个教程,但更多的是一个试验品. 老早就知道Word有 ...
- 用python2.7,采集新浪博客
#coding=utf-8 #新浪博客 import urllib import re import os url=['']*1500 #每一骗博客的地址 title=['']*1500 #每一篇博客 ...
随机推荐
- LeetCode-5LongestPalindromicSubstring(C#)
# 题目 5. Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. ...
- JavaScript的继承实现方式
1.使用call或apply方法,将父对象的构造函数绑定在子对象上 function A(){ this.name = 'json'; } function B(){ A.call(this); } ...
- Matlab 高脚杯模型切片
前言:此文为去年我替人做的一个课题,觉得比较简洁,图形也比较美观,因此放在博文里 数据源我放到了百度云盘高脚杯数据源 有兴趣的可以下载数据,跑程序试一下.也可以单独看看代码,看下实现过程. 主函数 % ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- InnoDB关键特性学习笔记
插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...
- HTML块级元素
前面的话 在HTML5出现之前,人们一般把元素分为块级.内联和内联块元素.本文将详细介绍HTML块级元素 h 标题(Heading)元素有六个不同的级别,<h1>是最高级的,而&l ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts
系列目录 ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fire ...
- 如何优化coding
如何优化coding 前言 最近一直在做修改bug工作,修改bug花费时间最多的不是如何解决问题而是怎样快速读懂代码.如果代码写的好的,不用debug就可以一眼看出来哪里出了问题.实际上,我都要deb ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
- cocos2dx调用浏览器打开网址
安卓端cocos2dx/platform/android路径下CCApplication.h: virtual void openURL(const char* pszUrl); CCApplicat ...