python编写爬虫小程序

   我们可以通过python 来实现这样一个简单的爬虫功能,把我们想要的代码爬取到本地。下面就看看如何使用python来实现这样一个功能。

  起因

  深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊、“多线程”啊都没有学到。

  想到廖雪峰大神的python教程很经典、很著名。就想找找有木有pdf版的下载,结果居然没找到!!CSDN有个不完整的还骗走了我一个积分!!尼玛!!

  怒了,准备写个程序直接去爬廖雪峰的教程,然后再html转成电子书。

  过程

  过程很有趣呢,用浅薄的python知识,写python程序,去爬python教程,来学习python。想想有点小激动……

  果然python很是方便,50行左右就OK了。直接贴代码:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

# coding:utf-8
import urllib
 
domain = 'http://www.liaoxuefeng.com' #廖雪峰的域名
path = r'C:Userscyhhao2013Desktoptemp' #html要保存的路径
 
# 一个html的头文件
input = open(r'C:Userscyhhao2013Desktop.html', 'r')
head = input.read()
 
# 打开python教程主界面
f = urllib.urlopen("http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000")
home = f.read()
f.close()
 
# 替换所有空格回车(这样容易好获取url)
geturl = home.replace("n", "")
geturl = geturl.replace(" ", "")
 
# 得到包含url的字符串
list = geturl.split(r'em;"><ahref="')[1:]
 
# 强迫症犯了,一定要把第一个页面也加进去才完美
list.insert(0, '/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000">')
 
# 开始遍历url List
for li in list:
url = li.split(r'">')[0]
url = domain + url #拼凑url
print url
f = urllib.urlopen(url)
html = f.read()
 
# 获得title为了写文件名
title = html.split("<title>")[1]
title = title.split(" - 廖雪峰的官方网站</title>")[0]
 
# 要转一下码,不然加到路径里就悲剧了
title = title.decode('utf-8').replace("/", " ")
 
# 截取正文
html = html.split(r'<!-- block main -->')[1]
html = html.split(r'<h4>您的支持是作者写作最大的动力!</h4>')[0]
html = html.replace(r'src="', 'src="' + domain)
 
# 加上头和尾组成完整的html
html = head + html+"</body></html>"
 
# 输出文件
output = open(path + "%d" % list.index(li) + title + '.html', 'w')
output.write(html)
output.close()

  简直,人生苦短我用python啊!

  以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-08-04 00:12:00

python编写爬虫小程序的相关文章

详情Python编写shellcode注入程序入门教程

背景 本文为入门基础,纯科普,大牛莫喷~ 教程中所有内容仅供学习研究,请勿用于非法用途,否则....我也帮不了你啊... 说起注入,大家第一印象可能还习惯性的停留在sql注入,脚本注入(XSS)等.今天light同(jiao)学(shou)带大家从web端回到操作系统,一起探讨Windows下的经典注入--内存注入,使用python编写一个简单的代码注入程序. 内存注入常见的方法有dll注入和代码注入.Dll注入通俗地讲就是把我们自己的dll注入到目标进程的地址空间内,"寄生"在目标进

求java编写一个小程序 在线急等 谢谢大家

问题描述 这个地址需求下载谢谢大家在线等 解决方案 解决方案二:大家放心我肯定给帮助我的人结贴的不会食言解决方案三:好心人帮帮忙吧解决方案四:大哥,你直接贴需求吧,还要别人下载,谁愿意啊,麻烦的要死

使用Python编写一个模仿CPU工作的程序_python

今天早上早些时候,在我的Planet Python源中,我读到了一篇有趣的文章"开发CARDIAC:纸板计算机(Developing upwards: CARDIAC: The Cardboard Computer)",它是关于名为Cardiac的纸板计算机的.我的一些追随者和读者应该知道,我有一个名为简单CPU(simple-cpu)的项目,过去的数月我一直工作于此,并且已经发布了源代码.我真的应该给这个项目提供一个合适的许可证,这样,其他人可能更感兴趣,并在他们自己的项目中使用.不

用Python编写一个国际象棋AI程序_python

最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来.你可以直接通读本文,或者去下载代码,边读边看代码.虽然去看看其他文件中有什么AI依赖的类也可能有帮助,但是AI部分全都在AI.py文件中. AI 部分总述 AI在做出决策前经过三个不同的步骤.首先,他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到几种).其次,它生成一个棋步树用来

python编写网页爬虫脚本并实现APScheduler调度_python

前段时间自学了python,作为新手就想着自己写个东西能练习一下,了解到python编写爬虫脚本非常方便,且最近又学习了MongoDB相关的知识,万事具备只欠东风. 程序的需求是这样的,爬虫爬的页面是京东的电子书网站页面,每天会更新一些免费的电子书,爬虫会把每天更新的免费的书名以第一时间通过邮件发给我,通知我去下载. 一.编写思路: 1.爬虫脚本获取当日免费书籍信息 2.把获取到的书籍信息与数据库中的已有信息作比较,如果书籍存在不做任何操作,书籍不存在,执行插入数据库的操作,把数据的信息存入Mo

Python编写百度贴吧的简单爬虫_python

操作:输入带分页的地址,去掉最后面的数字,设置一下起始页数和终点页数 功能:下载对应页码的所有页面并储存为HTML文件,以当前时间命名 代码: # -*- coding: utf-8 -*- #---------------------------- # 程序:百度贴吧的小爬虫 # 日期:2015/03/28 # 语言:Python 2.7 # 操作:输入带分页的地址,去掉最后面的数字,设置一下起始页数和终点页数 # 功能:下载对应页码的所有页面并储存为HTML文件,以当前时间命名 #-----

编写爬虫程序的神器 - Groovy + Jsoup + Sublime(转)

写过很多个爬虫小程序了,之前几次主要用C# + Html Agility Pack来完成工作.由于.NET FCL只提供了"底层"的HttpWebRequest和"中层"的WebClient,故对HTTP操作还是需要编写很多代码的.加上编写C#需要使用Visual Studio这个很"重"的工具,开发效率长期以来处于一种低下的状态.   最近项目里面接触到了一种神奇的语言Groovy -- 一种全面兼容Java语言且提供了大量额外语法功能的动态语

hta文件介绍(编写小程序的好东东)_hta

总是想用script语言编写一些小程序,以前总是写成html格式的,可每次打开都会有安全提示,今天突然发现了如果保存成hta格式的文件,效果大不一样. 嘿嘿.. HTA是HTML Application的缩写(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,与VB.C++等程序语言所设计的软件没什么差别. 下面是一个HTA的例子: 复制代码 代码如下: <!-example1.hta--><html><head><

C语言编写获取Linux本地目录及本机信息的小程序实例_C 语言

展示目录的小程序展示指定目录的小程序: #include <unistd.h> #include <stdio.h> #include <dirent.h> #include <string.h> #include <sys/stat.h> #include <stdlib.h> void printdir(char *dir,int depth){ DIR *dp; struct dirent *entry; struct stat