Python下载网络图片

  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

时间: 2024-10-15 00:17:19

Python下载网络图片的相关文章

iOS 用GCD下载网络图片方法

用多线程下载网络图片会导致重复下载浪费流量的问题. 以免出现以上情况,用多线程下载图片方法可以用以下方法. 1.创建一个字典,如果下载了该图片则将用图片地址为key,图片为value保存. 2.创建一个字典,如果子线程已开始下载则用图片地址为key,图片地址为value保存. 3.如果正在下载中,显示占位图片 4.如果字典中有下载的图片,则刷新图片 //属性 @interface ViewController () @property (weak, nonatomic) IBOutlet UII

Python下载Yahoo!Finance数据

Python下载Yahoo!Finance数据的三种工具: (1)yahoo-finance package. (2)ystockquote. (3)pandas.

python下载pps视频

简单的python下载脚本 思路 视频播放地址提取 直接解析一下原网页的源文件,利用正则就可以得到所有视频的播放地址,下面的代码以微信公共平台python教程的播放地址为例. 视频链接提取 这里利用了飞驴视频下载API进行视频链接提取,按照API的格式填写相关参数就ok了 视频下载并保存 使用urllib.urlretrieve函数保存视频就可以了 源代码 源代码贴出来,大家相互学习一下.代码比较简单,是按照上面的思路一步步做的,这里就不详细解释了 ```python !/usr/bin/env

Java与Python下载Bing首页图片

Java与Python下载Bing首页图片 一,首先是Java代码 import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache

[转] 三种Python下载url并保存文件的代码

原文 三种Python下载url并保存文件的代码 利用程序自己编写下载文件挺有意思的. Python中最流行的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法requests. 来看看三种方法是如何来下载zip文件的: import urllib import urllib2 import requests url = 'http://www.blog.pythonlibrary.org/wp-c

python 下载虾米音乐

#!/usr/bin/env python2 # coding:utf-8 import urllib import re import sys import urllib2 # xml => http://www.xiami.com/widget/xml-single/sid/1769215777 # string = "5h3%..i%2323F27%_3ueb5cc554e525-ntA2fx.2%9F211_5l%ty5d227E4-E8E%ut%FiicF2532759E.3h%

Android实战简易教程-第七十一枪(异步网络下载网络图片及图片廊制作)

首先来实现异步下载网络图片,布局文件如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_pare

Python下载网页的几种方法

get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在servlet/jsp中就无法处理发挥java的比如vector之类的功能). post方式:就传输方式讲参数会被打包在数据报中传输,从CONTENT_LENGTH这个环境变量中读取,便于传送较大一些的数据,同时因为不暴露数据在浏览器的地址栏中,安全性相对较高,但这样的处理效率会受到影响. get

android下载网络图片并缓存

异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ImageCallback callback); public void downloadImage(final String url, final boolean cache2Memory, final ImageCallback callback); public void setCache2F