今天要下載很多張圖片,手動麻煩,於是寫了個小程式。期間遇到不少問題。
最主要的一個是,訪問某些網頁會返回403 Forbidden,後來在加入了header資訊之後得到解決。記錄下。
這裡用到了正則,urllib網頁編程等知識。好久沒用了,算是複習。
代碼
# -*- encoding:UTF-8 -*-
import re,urllib2
def getPage(url):
'''下載檔案html代碼,找出一樓的核心代碼'''
opener = urllib2.build_opener()
#不加頭資訊則出現403錯誤和亂碼
opener.addheaders = [('User-agent', 'Mozilla/5.0')];
htmlAll = opener.open( url ).read()
reg1Floor = '<div class="msgfont">(.*?)</div>'
html = re.search(reg1Floor,htmlAll)
html = html.group()
#檔案儲存編碼和檔案編輯編碼都是utf-8,所以decode一次,不然會出現亂碼,但是不影響結果。
return html.decode('utf-8')
def getImg(url):
'''從核心代碼中照圖圖片地址,並且下載儲存、命名'''
regImg = '<img src="(.*?)" alt="" />'
dir = 'F:\\My_Document\\Desktop\\temp\\'
pageHtml = getPage(url)
#找到所有圖片地址
imglist = re.findall(regImg,pageHtml)
#print imglist
for index in xrange(1,len(imglist)+1):
finename = dir + str(index) + '.jpg'
urllib.urlretrieve(imglist[index-1], finename)
print finename + ' ok!'
if __name__ == '__main__':
getImg('http://topic.csdn.net/u/20101013/11/024465A6-8E16-444C-9A09-DD374D29044C.html')