用Python写的图片蜘蛛人

    原文地址:http://www.darkbull.net/python/bd/%E5%86%99%E4%B8%AA%E5%9B%BE%E7%89%87%E8%9C%98%E8%9B%9B%E7%8E%A9%E7%8E%A9/

    写了个图片蜘蛛人玩玩,抓了几个网页试试,感觉不不错。核心的代码可能20行也不到,简洁明了,嘻嘻。废话少说,翠花,上代码~~

#coding=utf-8

import os
import sys
import re
import urllib

URL_REG = re.compile(r'(http://[^///]+)', re.I)
IMG_REG = re.compile(r'<img[^>]*?src=([/'"])([^/1]*?)/1', re.I)

def download(dir, url):
	'''下载网页中的图片
	
	@dir 保存到本地的路径
	@url 网页url
	'''
	global URL_REG, IMG_REG
	
	m = URL_REG.match(url)
	if not m: 
		print '[Error]Invalid URL: ', url
		return
	host = m.group(1)
	
	if not os.path.isdir(dir):
		os.mkdir(dir)
	
	# 获取html,提取图片url
	html = urllib.urlopen(url).read()
	imgs = [item[1].lower() for item in IMG_REG.findall(html)]
	f = lambda path: path if path.startswith('http://') else /
				host + path if path.startswith('/') else url + '/' + path
	imgs = list(set(map(f, imgs)))
	print '[Info]Find %d images.' % len(imgs)
	
	# 下载图片
	for idx, img in enumerate(imgs):
		name = img.split('/')[-1]
		path = os.path.join(dir, name)
		try: 
			print '[Info]Download(%d): %s'% (idx + 1, img)
			urllib.urlretrieve(img, path)
		except: 
			print "[Error]Cant't download(%d): %s" % (idx + 1, img)
	
def main():
	if len(sys.argv) != 3:
		print 'Invalid argument count.'
		return
	dir, url = sys.argv[1:]
	download(dir, url)

if __name__ == '__main__':
	# download('D://Imgs', 'http://www.163.com')
	main()


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值