学习Python第四天,看书上的理论知识看的晕晕乎乎的,一大堆的文字涌进脑海。代码这种东西嘛,还是得要敲。于是就想着尝试着写一个爬虫试试看,爬爬图片。花了我近两个小时啊,才写出这玩意儿,就爬爬豆瓣的图片。
先给看个界面:
上代码:
#coding:utf-8
import urllib
import re,wx
app=wx.App()
win=wx.Frame(None,title="图片下载",size=(410,335))
bkg=wx.Panel(win)
urlText=wx.StaticText(bkg,label="目标网址:")
submmitButton=wx.Button(bkg,label="提交")
imgText=wx.StaticText(bkg,label="保存图片的位置:")
urlname=wx.TextCtrl(bkg)
imgname=wx.TextCtrl(bkg)
text=wx.TextCtrl(bkg)
first=wx.BoxSizer()
first.Add(urlText,proportion=0,flag=wx.RIGHT,border=5)
first.Add(urlname,proportion=1,flag=wx.EXPAND)
first.Add(submmitButton,proportion=0,flag=wx.LEFT,border=5)
second=wx.BoxSizer()
second.Add(imgText,proportion=0,flag=wx.RIGHT,border=5)
second.Add(imgname,proportion=1,flag=wx.EXPAND)
all=wx.BoxSizer(wx.VERTICAL)
all.Add(first,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)
all.Add(second,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)
all.Add(text,proportion=5,flag=wx.EXPAND|wx.ALL,border=5)
bkg.SetSizer(all)
win.Show()
def getHtml(url):
page=urllib.urlopen(url)
html=page.read()
return html
def getImg(html):
reg=r'data-origin="(.+?\.jpg)"'
imgre=re.compile(reg)
imglist=re.findall(imgre,html)
return imglist
def saveImg(place,imglist):
x=0
for imgurl in imglist:
print '正在下载第',x,'个'
print imgurl
urllib.urlretrieve(imgurl,place+'\%s.jpg'%x)
x+=1
print '下载完成'
def submmit(event):
imglist=getImg(getHtml(urlname.GetValue()))
print len(imglist)
saveImg(imgname.GetValue(),imglist)
submmitButton.Bind(wx.EVT_BUTTON,submmit)
app.MainLoop()
写程序的时候一开始,运行下来图片是都下下来了,但是大部分的图片都是不能看的。以为是自己的代码写的有问题,函数之类的用错了,看代码,调代码,搞了半天还是一样的。最后想到可能是正则表达式的问题,我原先写的是
reg=r'src="(.+?\.jpg)"'
再去看了一下www.douban.com的源代码(因为我是拿豆瓣的网页做练习的),发现豆瓣的图片原码都是
img
src
="
http://img3.douban.com/pics/blank.gif
"
data-origin
="
http://img3.douban.com/view/photo/albumcover/public/p2243992540.jpg
"这种形式的,于是把正则表达式改了,改成现在这样的。运行,查看图片,没问题。心情好啊。其实正则表达式还应该再修改的,修改成符合所有情况的,还可以改进。
毕竟是自己的第一个爬虫程序,虽然粗糙,应该是很粗糙,对很多人来说其实很容易,但是成就GET。写完有很多想法等我去实践。