[8]個人學習python:爬取豆瓣首頁所有圖片
阿新 • • 發佈:2019-02-01
程式碼如下:
# -*- coding: utf-8 -* import urllib.request,socket,re,sys,os savepath=r'C:\\Users\\Administrator\\PycharmProjects\\untitled\\venv1\\image\\' def saveimage(url): if not os.path.isdir(savepath): os.mkdir(savepath) begin=url.rindex('/') #獲取圖片名字的位置的前一位作為索引,最後一個'\'號的位置 imagepath=os.path.join(savepath,url[begin+1:]) #path[begin+1:]擷取圖片名字',並加其加入到檔案路徑 return imagepath url='https://www.douban.com/' headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} req=urllib.request.Request(url=url,headers=headers) page=urllib.request.urlopen(req) html=page.read() reg=r'(https:[^\s]*?(png|gif|jpg))' imag=re.compile(reg) imageurls=re.findall(imag,str(html)) #print (imageurls) #此處可以發現imageurls是一個包含圖片連結和圖片格式的列表,所以for要用兩個引數 for imageurl,p in imageurls: try: urllib.request.urlretrieve(imageurl,saveimage(imageurl)) print(imageurl, '\n下載成功') except: print (imageurl,'\n下載失敗')
結果如下:
分析:
分析下圖片地址https://img1.doubanio.com/dae/niffler/niffler/images/3a845768-5da8-11e8-b5f8-0242ac110008.jpg
rindex('/')獲取圖片地址的名字前一位位置作為索引,不要忘了圖片地址是字串!rindex()返回指定tr在字串中最後出現的位置,如果沒有匹配的字串會報異常。
1、正則表示式:
'.'匹配任意字元,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字元;
'*'匹配前一個字元零次到多次, '+'則是一次或多次,'?'匹配一次或零次,'[^\s]'匹配一個非空字元,'*?'常用搭配,匹配前一個或多個字元(可以重複匹配);
'\'+'字元'構成轉義字元,'\'+'元字元或轉義字元'使其無效化,r只是使轉義字元失效。
2、在儲存到某目錄之前,要先檢查一下目錄是否存在,不存在則建立;
os.path.isdir()判斷某一路徑是否為目錄;os.mkdir()建立目錄。
3、re.compile()函式用於編譯正則表示式,生成一個'正則表示式物件';
re.findall()在字串中找到‘正則表示式物件’所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
4、urllib.urlopen()方法用於開啟一個URL地址,通常還要加read()獲取資料;urllib.urlretrieve()將指定的網址檔案下載到本地。