功能说明:依次输入关键字,开始页码,结束页码(每页6张图)

其中,由于设定了timeout和其他错误检测,所以每页不一定6张都能爬下来。

有需求的拿去爬图用吧,仅供交流参考。不要乱爬,以免百度专门封堵,想用的都用不了了。

以后如果有时间再用pyqt做成界面吧。

代码如下:

#!/usr/bin/env python
#! -*- coding: utf-8 -*-
import urllib,urllib2
import re
import time
#返回网页源代码
def getHtml(url):
	# print 'Start Downloading Html Source Code'

	user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
	headers = {'User-Agent' : user_agent }
	req = urllib2.Request(url,headers = headers)
	html = urllib2.urlopen(req)
	srcCode = html.read()
	# print srcCode
	return srcCode

'''''''''''''''''''''
# 下载网页中的图片
# srcCode : 输入的包含图片绝对路径(可下载链接)的网页源代码
# page : 只是用于给下载的图片命名用
'''''''''''''''''''''
def getImg(srcCode,page):
	#对网页中图片建立正则
	pattern = re.compile(r'<a href="(.*?)"><img.*?class="i".*?src=".*?".*?alt="百度图片" t=""/></a>')

	#图片完整路径存储为list
	imgSrcHtml = pattern.findall(srcCode)
	# print imgSrcHtml
	num = 0 + 6 * (page-1)
	# count = endPage - startPage
	# for x in xrange(1,count):

	for i in imgSrcHtml:
		# 补全链接,得到完整地址
		i = 'http://image.baidu.com' + i
		print i
		imageSrc = getHtml(i)
		# print imageSrc
		imagePattern = re.compile(r'<a.*?href="(.*?\.jpg)">原图.*?</a>')
		# 层层进入,得到图片的链接
		imageRealSrc = imagePattern.findall(getHtml(i))
		num += 1

		for src in imageRealSrc:
			user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
			headers = {'User-Agent' : user_agent }
			req = urllib2.Request(src,headers = headers)

			print "正在下载"
			print src
			try:
				html = urllib2.urlopen(req,timeout = 10)
			except Exception, e:
				print '抛出异常为:' + str(e)
				num += 1
				break
			try:
				f = open("./" + '%s.jpg' % num, 'w+b')
				f.write(html.read())
				f.close()
			except Exception, e:
				print '抛出异常为:' + str(e)
				# num +=1
				break
	print '全部任务完成!'


ur = 'http://image.baidu.com/i?tn=wisemidresult&ie=utf8&word=%E5%AE%A4%E5%86%85%E6%99%AF&pn=0&rn=6&size=mid&fmpage=result&pos=next'

# startPage: 起始页码
# endPage: 终止页面
# 每页有六张图
def getPageImg(startPage,endPage,url):
	for x in xrange(startPage,endPage):
		print "正在下载第" + str(x) + "页"
		# 最早是爬的美食图片
		meishi = url + "pn=%s&rn=6&gsm=6&size=mid&fmpage=result&pos=next" % ((x-1)*6)
		print meishi
		getImg(getHtml(meishi),x)


keyWord = raw_input(unicode("请输入搜索内容\n",'utf8'))
startPage = int(raw_input(unicode("从第几页开始? 请输入数字\n",'utf8')))
endPage = int(raw_input(unicode("到第几页结束? 请输入数字\n",'utf8')))

# 将关键字包含进网页前半部分
# 后半部分在getPageImg中处理, 后半部分包含页码
myurl = "http://image.baidu.com/i?tn=wisemidresult?tn=wisemidresult&ie=utf8&word=%s&" % keyWord

getPageImg(startPage,endPage,myurl)


就酱。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐