百度圖片爬蟲
功能說明:依次輸入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)
百度圖片爬蟲