1. 程式人生 > >百度圖片爬蟲

百度圖片爬蟲

pyqt inpu http get odi 設有 int gen out

功能說明:依次輸入keyword。開始頁碼,結束頁碼(每頁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'))) # 將keyword包括進網頁前半部分 # 後半部分在getPageImg中處理, 後半部分包括頁碼 myurl = "http://image.baidu.com/i?tn=wisemidresult?tn=wisemidresult&ie=utf8&word=%s&" % keyWord getPageImg(startPage,endPage,myurl)


就醬。

百度圖片爬蟲