前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下。
以下是网上很容易搜到的一种方法:
1 #coding=utf-8 2 import urllib 3 import re 4 5 def getHtml(url): 6 page = urllib.urlopen(url) 7 html = page.read() 8 return html 9 10 def getImg(html): 11 reg = r'src="(.+?.jpg)" pic_ext' 12 imgre = re.compile(reg) 13 imglist = re.findall(imgre,html) 14 x = 0 15 for imgurl in imglist: 16 urllib.urlretrieve(imgurl,'%s.jpg' % x) 17 x+=1 18 19 20 html = getHtml("http://tieba.baidu.com/p/2460150866") 21 22 print getImg(html)
我写的代码与之大同小异,但运行之居然没有反应;我甚至将代码直接copy下来运行,但还是不成功。
没办法,只好自己逐一调试。
首先我把获取到的html代码写入html.txt文件,方便我查看对照,这时,发现了第一个问题:通过urllib获得的html代码与浏览器中Ctrl+U查看到的代码并不是一回事。
接着,我用正则';src=(.*?imgsrc.*?.jpg)'去匹配html.txt中的代码,这时,关键问题出现了:匹配到的都是诸如http%3A%2F%2Fxx.jpg 这样的地址,这样问题就很明显了,在使用urllib获取html时,':'和'/'被转码了。使用转码后的地址去下载图片当然是行不通的,需要将被转码的地址转回utf8编码。
以下是我对gethtml(url)的修改:
def gethtml(url): page=urllib.urlopen(url) html=page.read() html=re.sub('%3A',':',html) html=re.sub('%2F','/',html) return html
办法好像笨了一些,望大家多多指教。不过,这下程序就可以成功运行了~,分享下下载的图片,并附上地址:http://tieba.baidu.com/p/3604860421?lp=5027&mo_device=1&pn=0&