百度图片python爬虫小程序

自己写的一个百度图片爬虫小程序,用tkinter写了界面

 

 源码如下

'''
Created on 2019-4-9

@author: czh
'''
import tkinter as tk  
import requests #首先导入库
import  re
import time
import threading
from tkinter import scrolledtext
window = tk.Tk()



window.title('网络爬虫小程序——czh')
window.geometry('1000x600')  
e = tk.Entry(window, show = None)
e.pack()

##t = tk.Text(window, height=3)
t = scrolledtext.ScrolledText(window, height=100, width=400,wrap=tk.WORD)


MaxSearchPage = 20 # 收索页数
CurrentPage = 0 # 当前正在搜索的页数
DefaultPath = "D:/data/Crawler/" # 默认储存位置
NeedSave = 0 # 是否需要储存
m=1
#图片链接正则和下一页的链接正则
def imageFiler(content): # 通过正则获取当前页面的图片地址数组
    return re.findall('"objURL":"(.*?)"',content,re.S)
def nextSource(content): # 通过正则获取下一页的网址
    next = re.findall('<div id="page">.*<a href="(.*?)" class="n">',content,re.S)[0]
    
    ##print("---------" + "http://image.baidu.com" + next) 
    return next
def spidler(source):
    content = requests.get(source).text  # 通过链接获取内容
    imageArr = imageFiler(content) # 获取图片数组
    global CurrentPage
    ##print("Current page:" + str(CurrentPage) + "**********************************")
    for imageUrl in imageArr:
            ##print(imageUrl)
            global  NeedSave
            if NeedSave:              # 如果需要保存图片则下载图片,否则不下载图片
                global DefaultPath
                try:# 下载图片并设置超时时间,如果图片地址错误就不继续等待了
                    picture = requests.get(imageUrl,timeout=5) 
                except:                
                    ##print("Download image error! errorUrl:" + imageUrl)   
                    continue
                # 创建图片保存的路径
                imageUrl = imageUrl.replace('/','').replace(':','').replace('?','')
                pictureSavePath = DefaultPath + imageUrl
                fp = open(pictureSavePath,'wb') # 以写入二进制的方式打开文件
                fp.write(picture.content)
                global m
                t.insert('end', "Image"+str(m)+":"+str(imageUrl))
                t.insert('end', '\n')
                m=m+1
                t.pack()
                fp.close()
            global MaxSearchPage
            if CurrentPage <= MaxSearchPage:    #继续下一页爬取
                if nextSource(content):
                    CurrentPage += 1 
                    # 爬取完毕后通过下一页地址继续爬取
                    spidler("http://image.baidu.com" + nextSource(content))  
def  beginSearch(): 
    ##print(1)
    # (page:爬取页数,save:是否储存,savePath:默认储存路径)
    global MaxSearchPage,NeedSave,DefaultPath
    page=1
    MaxSearchPage = page
    save=1
    ##savePath="D:/data/Crawler/"
    ##savePath="../Crawler/"
    NeedSave = save                    #是否保存,值0不保存,1保存
    ##DefaultPath = savePath                #图片保存的位置
    ##key = input("输入爬虫关键词:") 
    key = e.get()
    StartSource = "http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=" + str(key) + "&ct=201326592&v=flip" # 分析链接可以得到,替换其`word`值后面的数据来搜索关键词
    ##print(StartSource)
    ##t.insert('insert', StartSource)
    ##t.insert('insert','\n')
    ##t.pack()
    ##time.sleep(5)
    spidler(StartSource)  
 
def thread_it():
    '''将函数打包进线程'''
    # 创建
    t2 = threading.Thread(target=beginSearch) 
    # 守护 !!!
    t2.setDaemon(True) 
    # 启动
    t2.start()  
    
##b1 = tk.Button(window, text='开始爬虫', width=10,height=2, command=thread_it(beginSearch, 1))
b1 = tk.Button(window, text='开始爬虫', width=10,height=2, command=thread_it)
b1.pack()
t.pack()
window.mainloop()

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值