python自动下载图片

有时候需要自动下载图片,在图片比较多的时候,一张张保存也麻烦,该脚本可以自动爬取站点里面的图片,并保存。

需要的童鞋拿去用大笑

#-*- coding: utf-8 -*-
'''
author: Derry
date:2015.1.19
'''
from HTMLParser import HTMLParser
import urllib
import time
import random
import os
import re
def saveImage(host,url):
	try:
		splitPath = url.split('/')
		f_name ="%d_"%random.randint(1,99999) + splitPath.pop()
		res = re.match('^http',url)
		if res is None:
			url='http://'+host+"/"+url
			print 'fixed image url=',url
		cmd='curl -o ./img/%s %s'%(f_name,url)
		os.system(cmd)
	except Exception,e:
		print "[Error]couldn't download: %s:%s" %(f_name,e)
		
def getHost(url):
	hosts=[]
	res = re.match('^http',url)
	if res == None:
		return ""
	else:
		segs=url[7:].split('/')
		print segs
		#segs[0] is the host
		return segs[0]
		
class MyParser(HTMLParser):
	def __init__(self,url):
		HTMLParser.__init__(self)
		self.url_list=[]
		self.url = url
		self.host=getHost(url)
		
	def handle_starttag(self,tag,attrs):
		if tag == 'a' and attrs:
			for key ,value in attrs:
				
				if key == 'href':
					if len(value) < 10 or value.find('javascript') != -1:
						continue
					self.url_list.append(value)
		if tag == 'img' and attrs:
			for key,value in attrs:
				if key=='src':
					print 'img url=',value
					saveImage(self.host,value)
					#urllib.urlretrieve(value,genFileName())
					
	def getUrlList(self):
		v_list=[]
		for url in self.url_list:
			if url.find(self.url) == -1:
					res = re.match('^http',url)
					if res is None:
						url='http://'+self.host+"/"+url;
						print 'fixed url=',url
					v_list.append(url)
			else:
				print 'is expect url',url
		return v_list


all_urls = ['http://www.hao123.com'] #抓取图片的初始网址
history_urls = []		
all_hosts=[]
while len(all_urls) > 0:	
	cur_url=''
	while True:
		cur_url=all_urls[0]
		if cur_url in history_urls:
			all_urls.remove(cur_url)
			continue
		else:
			all_urls.remove(cur_url)
			history_urls.append(cur_url)
			break
	print 'visiting url [%s]'%(cur_url)
	try:
		page = urllib.urlopen(cur_url).read()
	except Exception,e:
		print 'url open error',e
		continue
	parser = MyParser(cur_url)
	#print page
	try:
		parser.feed(page)
	except Exception,e:
		print 'feed error',e
		continue
	cur_url_list = parser.getUrlList()
	#cur_host_list = splitHost(cur_url_list)
	#print cur_host_list
	all_urls.extend(cur_url_list)
	parser.close()
#	print all_urls

	
	
	

	


### 回答1: 在 Python 中,你可以使用 requests 库来下载图片。你需要先使用 pip 安装它: ``` pip install requests ``` 然后,你可以使用 requests.get() 函数来获取图片的内容,并将其保存到文件中。例如,你可以使用以下代码来下载并保存一张图片: ```python import requests url = 'https://www.example.com/image.jpg' response = requests.get(url) with open('image.jpg', 'wb') as f: f.write(response.content) ``` 在这段代码中,我们首先使用 requests.get() 函数获取图片的内容,然后使用 open() 函数打开一个文件,并使用 write() 方法将图片内容写入文件。 你也可以使用其他方法来完成这个任务,例如使用 Python 内置的 urllib 库,或者使用第三方库如 Beautiful Soup 来解析网页并获取图片的地址。 ### 回答2: Python的requests库和urllib库是常用的用于网络请求的工具,可以方便地用来实现自动下载图片。 使用requests库下载图片的方法如下: 1. 首先,我们需要导入requests库。可以使用以下代码完成导入: ```python import requests ``` 2. 接下来,我们可以使用requests库的`get`方法来发送GET请求,获取图片的二进制数据。可以使用以下代码来实现: ```python response = requests.get(image_url) ``` 其中,`image_url`为要下载图片的URL地址。 3. 下一步,我们需要将获取的二进制数据写入到文件中。可以使用以下代码来实现: ```python with open('image.jpg', 'wb') as file: file.write(response.content) ``` 其中,`image.jpg`为要保存的文件名,可以根据需要进行修改。 4. 最后,我们可以在合适的位置加上异常处理,以避免执行过程中出现错误导致程序崩溃。可以使用以下代码进行异常处理: ```python try: response = requests.get(image_url) response.raise_for_status() except requests.exceptions.RequestException as e: print(e) else: with open('image.jpg', 'wb') as file: file.write(response.content) ``` 至此,我们已经实现了使用Python自动下载图片的功能。可以根据实际需求,修改相应的URL地址和文件名,实现自动下载任意图片。 ### 回答3: Python可以利用第三方库如requests和urllib等来自动下载图片。下面是一个简单的示例代码: ```python import requests def download_image(url, save_path): response = requests.get(url, stream=True) if response.status_code == 200: with open(save_path, 'wb') as f: for chunk in response.iter_content(1024): f.write(chunk) print('图片下载成功!') else: print('图片下载失败!') # 调用示例 image_url = 'http://example.com/image.jpg' # 图片的URL save_location = 'image.jpg' # 图片保存路径 download_image(image_url, save_location) ``` 以上代码定义了一个`download_image`函数,可以通过提供图片的URL和保存路径来自动下载图片。首先使用requests库的`get`方法发送GET请求获取图片数据,然后以二进制方式将数据写入本地文件。最后根据服务器返回的状态码判断下载是否成功,并输出相应的提示信息。 需要注意的是,通过这种方式下载图片需要确保图片的URL是有效的,并且有正常的访问权限。同时,为了避免网络请求过程中出现错误,建议将下载操作放在适当的异常处理结构中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值