前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下。
以下是网上很容易搜到的一种方法:
#coding=utf-8
import urllib
import re def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl,'%s.jpg' % x)
x+=1 html = getHtml("http://tieba.baidu.com/p/2460150866") 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&