上次写了一个爬世纪佳缘的爬虫之后,今天再接再厉又写了一个新浪博客的爬虫。写完之后,我想了一会儿,要不要在博客园里面写个帖子记录一下,因为我觉得这份代码的含金量确实太低,有点炒冷饭的嫌疑,就是把上次的代码精简了一下,用在另外一个网站而已,而且爬别人的博客总有一种做贼心虚的感觉,怕被各位园友认为是偷窥狂魔。但是这份代码总归是我花了精力去写的,我也不想就此让它深藏在硬盘之中(电脑实在太老了,可能过两年硬盘坏了,这份代码就消失了),还是贴出来权当作抛砖引玉。

说起要爬新浪博客,总归是有一个原因吧。我的原因呢也是什么的简单,就是这两天在网上下载了一本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
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网络爬虫 新浪博客篇的更多相关文章

  1. Python爬虫爬取一篇韩寒新浪博客

    网上看到大神对Python爬虫爬到非常多实用的信息,认为非常厉害.突然对想学Python爬虫,尽管自己没学过Python.但在网上找了一些资料看了一下,看到爬取韩寒新浪博客的视频.共三集,第一节讲爬取 ...

  2. [Python学习] 简单网络爬虫抓取博客文章及思想介绍

            前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...

  3. python中multiprocessing.pool函数介绍_正在拉磨_新浪博客

    python中multiprocessing.pool函数介绍_正在拉磨_新浪博客     python中multiprocessing.pool函数介绍    (2010-06-10 03:46:5 ...

  4. python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客

    python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客     python datetime模块strptime/strptime form ...

  5. python中逐行读取文件的最佳方式_Drupal_新浪博客

    python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式    (2010-08-18 15:59:28)    转载▼    标签:    python   ...

  6. python—webshell_醉清风xf_新浪博客

    python—webshell_醉清风xf_新浪博客 python—webshell (2012-05-23 09:55:46) 转载▼

  7. Word直接发布新浪博客(以Wo…

    原文地址:Word直接发布新浪博客(以Word 2013为例)作者:paulke2011 注意:这篇博客直接由Word 2013发出!这虽然也算是一个教程,但更多的是一个试验品. 老早就知道Word有 ...

  8. [转载]Word直接发布新浪博客(以Word 2013为例)

    原文地址:Word直接发布新浪博客(以Word 2013为例)作者:paulke2011 注意:这篇博客直接由Word 2013发出!这虽然也算是一个教程,但更多的是一个试验品. 老早就知道Word有 ...

  9. 用python2.7,采集新浪博客

    #coding=utf-8 #新浪博客 import urllib import re import os url=['']*1500 #每一骗博客的地址 title=['']*1500 #每一篇博客 ...

随机推荐

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  3. Jquery 搭配 css 使用,简单有效

    前几篇博客中讲了Jquery的基础和点击实际,下面来说一下和css搭配着来怎么做 还是和往常一样,举个例子 好几个方块,然后设置颜色 <!DOCTYPE html PUBLIC "-/ ...

  4. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  5. 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  6. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

  7. win8.1硬盘安装ubuntu14.04双系统

    在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubu ...

  8. How those spring enable annotations work--转

    原文地址:http://blog.fawnanddoug.com/2012/08/how-those-spring-enable-annotations-work.html Spring's Java ...

  9. Servlet监听器笔记总结

    监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...

  10. 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇

    最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...