1. 程式人生 > >Python下載網絡圖片

Python下載網絡圖片

base pen ble use make exist 捕獲 tin rop

  1 #coding=utf-8
  2 
  3 import re
  4 import requests
  5 import urllib
  6 import os
  7 import MySQLdb
  8 
  9 #初始化配置參數
 10 path = img/ #圖片存放目錄
 11 tableName0 = imgTable #表名
 12 #文件操作,如果不存在該目錄,創建文件夾
 13 if not os.path.exists(path):
 14     os.makedirs(path)
 15 
 16 # 連接數據庫 mysql
 17 conn= MySQLdb.connect(
18 host=localhost, 19 port = 3306, 20 user=root, 21 passwd=123, 22 db =test, 23 charset=utf8, 24 ) 25 cur = conn.cursor() 26 print "連接成功" 27 28 # 如果數據表已經存在使用 execute() 方法刪除表。 29 cur.execute("DROP TABLE IF EXISTS %s" % tableName0)
30 #創建數據表 31 cur.execute("create table %s(num varchar(2) ,name varchar(200),url varchar(200))" % tableName0) 32 33 #獲取html網頁 34 def getHtml(url): 35 page = urllib.urlopen(url) 36 html = page.read() 37 return html 38 39 #根據網頁內容獲取圖片地址列表 40 def getImg(html): 41 reg = r" src="(.+?\=550x0)" style="
42 imgre = re.compile(reg) 43 imglist = imgre.findall(html) 44 print imglist 45 return imglist 46 #t圖片保存 47 def save_img(url,path): 48 message = None 49 print path 50 try: 51 file = open(path + os.path.basename(url),wb) 52 request = urllib.urlopen(url) 53 file.write(request.read()) 54 except Exception as e: 55 #捕獲異常,定義異常實例e,可以捕獲除與程序退出sys.exit()相關之外的所有異常 56 message = str(e) 57 print message 58 else: 59 #如果try中的語句沒有引發異常,則執行else中的語句 60 message = os.path.basename(url) 61 finally: 62 #無論是否出現異常,都執行的代碼 63 if not file.closed: 64 file.close() 65 return message 66 67 #插入數據 68 def insertIntoDb(list): 69 i = 1 70 for imgurl in list: 71 id1 = i 72 urlR = dealURL(imgurl, ?imageView&thumbnail=550x0) 73 name = os.path.basename(urlR) 74 # 插入數據 75 sql = insert into %s values( \‘%d\‘,\‘%s\‘,\‘%s\‘) % (tableName0, id1, name, urlR) 76 cur.execute(sql) 77 78 #處理url,處理成以.jpg或.png結尾的url 79 def dealURL(url,str): 80 #方法一:截取 81 # 從左往右,第一個(默認)到倒數第三十個結束,截取間距為1. 82 # urlTemp = url[:-30:1] 83 #方法二:替換 84 urlTemp = url 85 urlTemp = urlTemp.replace(str,‘‘) 86 return urlTemp 87 88 #保存圖片到本地,在本程序中沒用到 89 def saveImge(imgList): 90 x = 1 91 for imgurl in imgList: 92 #方法一 93 # urllib.urlretrieve(imgurl, ‘%s.jpg‘ % x) 94 # print imgurl 95 96 #方法二,可定義存儲位置 97 pic = requests.get(imgurl, timeout=10) 98 string = path + str(x) + .jpg 99 fp = open(string, wb) 100 fp.write(pic.content) 101 fp.close() 102 103 #方法三,圖片名為url後面的一串 104 # path1 = path + str(x)+‘--‘ #添加數字方便統計 105 # save_img(imgurl,path1) 106 107 x += 1 108 109 # 方法四,從數據庫獲取,然後下載 110 def saveImageFromDb(): 111 # 獲得表中有多少條數據 112 allData = cur.execute("select * from %s" % tableName0) 113 print allData 114 # 打印表中的多少數據 115 list = cur.fetchmany(allData) 116 x=1 117 for data in list: 118 path1 = path + str(x) + -- 119 #data有三項,分別[0,1,2],對應的為[num,name,url] 120 url= data[2] 121 print url 122 save_img(url, path1) 123 x+=1 124 print "保存完成" 125 126 html = getHtml("http://news.163.com/17/0831/07/CT5B1SJB000181BT.html") 127 imgList123 = getImg(html) 128 insertIntoDb(imgList123) 129 saveImageFromDb() 130 # saveImge(imgList123) 131 132 # #翻轉測試 133 # sStr1 = ‘abcdefg‘ 134 # sStr1 = sStr1[::-1] 135 # print sStr1 136 137 #截取測試 138 # str = ‘0123456789‘ 139 # print "1:",str[:-1:2] 140 # print "2:",str[:0:-3] 141 # print "3:",str[-8:8:2] 142 # print "4:",str[-2:2:-2] 143 # print "5:",str[:-1:] 144 # print "6:",str[::] 145 # print "7:",str[::-1][:3] 146 147 #關閉數據庫 148 cur.close() 149 conn.commit() 150 conn.close()

環境:python2.7

Python下載網絡圖片