近日,在浏览伯乐在线(http://blog.jobbole.com/29281/)的时候碰到一些很不错的资源:25本免费的Python电子书

如下图:

其中,每本都是以名字+超链接的方式,于是激起了我写个小程序保存这些资源的欲望,顺便也能练习一些不太熟练的小爬虫 : ) 。 好了,我们开始吧!

先展示一下成果给大家看嗯: 如图

 

每本书都很有条理的保存在本地文档中,结果还是挺满意的哈。  

首先呢 要完成这些工作大概要分为一下几个步骤:

  1. 获得整个页面的源代码 (网页源码HTML)

  2. 获得目标区域的源代码 (缩小范围)

  3. 在小范围内匹配资源的URL

  4. 将匹配到的资源URL写入到本地保存

下面,将分为4个步骤来分部展示Python程序

第一,获得整个页面的源代码:

 def getHtml(url):
html = urllib.urlopen(url)
sorce = html.read()
return sorce

  该段代码将返回资源所在的整个页面的HTML源代码

第二,获得目标区域的源代码 (缩小范围):

 def getRange(content):
start0 = content.find(r'<div class="entry">')
start = content.find(r'<ol>',start0)
end = content.find(r'<div id="ad1">',start)
content2 = content[start:end]
return content2

第三,匹配资源的URL:

 def getLink(content2):
reg = re.compile(r'<a href="(.*?[.html|.pdf]?)" target=')
result = reg.findall(content2)
return result def getName(content2):
reg = re.compile(r'<a href=".*?[.html|.pdf]?" target="_blank">(.*?)</a>')
result2 = reg.findall(content2)
return result2

  以上俩个函数分别用来匹配资源的 链接 和 书名

第四,保存到本体:

  即是在print 的基础上从定向到文件中。详见下面的完整代码 : )

下面是完整代码:

 #!/usr/bin/env python
#coding:utf-8 import urllib
import re def getHtml(url):
html = urllib.urlopen(url)
sorce = html.read()
return sorce def getRange(content):
start0 = content.find(r'<div class="entry">')
start = content.find(r'<ol>',start0)
end = content.find(r'<div id="ad1">',start)
content2 = content[start:end]
return content2 def getLink(content2):
reg = re.compile(r'<a href="(.*?[.html|.pdf]?)" target=')
result = reg.findall(content2)
return result def getName(content2):
reg = re.compile(r'<a href=".*?[.html|.pdf]?" target="_blank">(.*?)</a>')
result2 = reg.findall(content2)
return result2 if __name__ == '__main__':
content = getHtml(r'http://blog.jobbole.com/29281/')
content2 = getRange(content)
link = getLink(content2)
name = getName(content2)
i = 1
f = open('content.txt','w+')
for x, y in zip(name, link):
print >>f, str(i),": ",x,
print >>f
print >>f,y
i = i + 1

看到这里您辛苦了,谢谢 : )

—————————————————————————————————————————————————————————————————————————————

声明:

  本文为 大Yi巴狼 对自己所学的知识整理和实现。

  本文档欢迎自由转载,但请务必保持本文档完整或注明来之本文档。本文档未经 大Yi巴狼 同意,不得用于商业用途。最后,如果您能从这个简单文档里获得些许帮助,大Yi巴狼 将对自己的一点努力感到非常高兴;由于作者本人水平有限,如果本文档中包含的错误给您造成了不便,在此提前说声抱歉。

  祝身体健康,工作顺利。

Python爬虫(小练习)的更多相关文章

  1. 一个python爬虫小程序

    起因 深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊.“多线程”啊都没有学到. 想到廖雪峰大神的python教程很经典.很著名.就想找找有木有pdf版的 ...

  2. 适合新手的Python爬虫小程序

    介绍:此程序是使用python做的一个爬虫小程序  爬取了python百度百科中的部分内容,因为这个demo是根据网站中的静态结构爬取的,所以如果百度百科词条的html结构发生变化 需要修改部分内容. ...

  3. python爬虫小实例

    1.python爬取贴吧壁纸 1.1.获取整个页面数据 #coding=utf-8 import urllib def getHtml(url): page = urllib.urlopen(url) ...

  4. 找python爬虫小项目?github给你准备好了!

    前言 即使我们都是程序员,但我们也并非都会修电脑,都会做酷炫的ppt,都会优化系统卡顿.其实程序员也是分行业.分专业的,就像医生也分内外科.呼吸科.神经科神的. 作为非专业的python选手,或者非专 ...

  5. Python爬虫小实践:爬取任意CSDN博客所有文章的文字内容(或可改写为保存其他的元素),间接增加博客访问量

    Python并不是我的主业,当初学Python主要是为了学爬虫,以为自己觉得能够从网上爬东西是一件非常神奇又是一件非常有用的事情,因为我们可以获取一些方面的数据或者其他的东西,反正各有用处. 这两天闲 ...

  6. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库

    前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种 ...

  7. 4.Python爬虫小案例

    1.网络爬虫定义:按照一定的规则,自动的抓取网站信息的程序或者脚本. 2.流程:request打开url得到html文档==浏览器打开源码分析元素节点==通过BeautifulSoup得到想要的数据= ...

  8. python 爬虫小案例

    爬取百度贴吧帖子信息 #!/usr/bin/env python # -*- coding: utf-8 -*- # author: imcati import requests,re,time cl ...

  9. python爬虫小项目实战

  10. GitHub 上有哪些优秀的 Python 爬虫项目?

    目录 GitHub 上有哪些优秀的 Python 爬虫项目? 大型爬虫项目: 实用型爬虫项目: 其它有趣的Python爬虫小项目: GitHub 上有哪些优秀的 Python 爬虫项目? 大型爬虫项目 ...

随机推荐

  1. NET中間語言(IL) 图解

    转载地址是:http://msdn.microsoft.com/zh-tw/library/dd229210.aspx 想查看IL指令,请看中英文对照表: CN-http://www.cnblogs. ...

  2. HttpWebRequest 模拟登录响应点击事件(分享自己用的HttpHelper类)

    平时也经常采集网站数据,也做模拟登录,但一般都是html控件POST到页面登录:还没有遇到用户服务器控件button按钮点击事件登录的,今天像往常一样POST传递参数,但怎么都能登录不了:最后发现还有 ...

  3. poj 1654 Area 多边形面积

    /* poj 1654 Area 多边形面积 题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> ...

  4. html5刮刮卡

    通过Canvas实现的可刮涂层效果. 修改img.src时涂层也会自动适应新图片的尺寸. 修改layer函数可更改涂层样式. 涂层: 可刮效果: 以下是HTML源代码(已增加移动设备支持): 1 2 ...

  5. ajax的一部分知识

    jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...

  6. 利用C语言结构体模拟一个简单的JavaBean

    利用C语言模拟一个Javabean 仅封装了,“无参构造函数”,“带参构造函数”,"toString方法" #include <stdio.h> struct User ...

  7. [转]div里table居中的问题 Div与body顶部间隙

    本文转自:http://www.cnblogs.com/jinhui/archive/2008/09/24/1297729.html 将div的text-align设为center,然后将table的 ...

  8. 关于Patter类和Match类

    部分引用自: http://developer.51cto.com/art/200906/131761.htm 本文将介绍Java正则表达式中的Pattern类与Matcher类.首先我们要清楚指定为 ...

  9. 2D几何

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...

  10. 【C语言】4-指针

    直接引用 1. 回想一下,之前我们是如何更改某个变量的值? 我们之前是通过变量名来直接引用变量,然后进行赋值: char a; a = 10;   2. 看上去是很简单,其实程序内部是怎么操作的呢? ...