刚接触Python不到一个礼拜,由于有C的基础,语法上手很快。
了解完语法后,于是想做个简单的爬虫,有了小小成就感也有学下去的动力啊。
接下来进入正题:
目标:把这个百度贴吧的帖子内的图片用爬虫下载下来
现在先理清概念:
网页都是由HTML写,我们打开一个网页,在Chrome右键点击"审查元素",就可以看到该网页的HTML代码。我们用ctrl + f 在打开的窗口中搜索jpg,搜索很多带有jpg的代码,这些代码形式都src="http://xxxxxx.jpg"这个样子。代码中间的连接就是该网页内图片的地址。
爬虫的思路:把网页的html代码抓下来,然后通过正则表达式筛选出带有jpg的连接,然后下载到文件夹里。
其中关于实现的过程,都有现成的函数方法可以让我们使用,这一点我们现在可以先不用考虑。
代码:
import re #re类,与正则表达式相关的类
import urllib #urllib类,内含与url相关的的方法
def getHtml(url): #抓取html代码
page = urllib.urlopen(url) #抓取网页所有内容
html = page.read() #得到网页的html代码
return html
def getImg(html): #从html代码中筛选出jpg的连接,并下载
reg = r'src="([A-Za-z0-9./=%:]*\.jpg)" pic_ext' #正则表达式
imgre = re.compile(reg) #正则表达式编译,可以加快查找速度
imglist = re.findall(imgre, html) #在html中搜索符合imgre正则表达式的连接
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl, r'%s.jpg' %x) #保存图片
x += 1
html = getHtml("http://tieba.baidu.com/p/3016698945")
getImg(html)
其中的函数,可以到python的官方网站上去阅读相关文档。
有关正则表达式,可以去看这个教程正则表达式30分钟入门教程。对于新手,记住正则表达式的功能是,为我们从一大堆文字中筛选出符合我们表达式的文字。先大致了解一下表达式的语法,不要死记,需要用的时候再去查表,这样会有效率得多。
这个小程序也是折腾了两天才弄好,关于新手语言学习,零零碎碎有了一些感触。
总结了一下体会:
- 我在学习写这个程序之前,根本不知道正则表达式是什么东西,只模模糊糊知道,爬虫要先筛选链接出来,并下载,但是不知道要如何筛选,如何下载。python函数库里有大量好用的函数,往往可以帮助我们实现一些我们意想不到的功能。这样的情况常常发生,就是我们要实现一个看似很难的功能,但是函数库里往往就有现成的函数可以使用。从另一个方面看,新手的学习过程,就是对语法和函数库的熟悉。
- 观看视频学习,比较能让人对概念和知识点理解得清晰一些。现在往往先去查阅资料阅读,然后可以的话去找个视频,跟着视频坐下来,思路会清楚不少。
- 很多看似高深的东西,只是因为一道坎挡着,而跨过这道坎,往往只需要点睛一笔。