当前位置: 首页 > news >正文

python写的百度图片爬虫

学了一下python正则表达式,写一个百度图片爬虫玩玩。

当技术遇上心术不正的人,就成我这样的2B青年了。

python3.6开发。程序已经打包好,下载地址: http://pan.baidu.com/s/1bpalugf 密码:kfk4

 

 

#!/usr/local/env python
from tkinter import *
import re,os,requests,hashlib,threading
from PIL import Image

class Application(Frame):
	def __init__(self, master=None):
		Frame.__init__(self, master)
		self.school=threading.local()
		self.pack()
		self.createWidgets()

	def createWidgets(self):
		self.nameLabel=Label(self,text='请输入关键词:')
		self.nameLabel.grid(row=0,sticky=W)
		
		self.nameInput = Entry(self)
		self.nameInput.grid(row=0,column=1)
		
		self.picys=IntVar()
		self.Checkbutton = Checkbutton(self,text='图片压缩',variable=self.picys)
		self.Checkbutton.grid(row=1,column=0,columnspan=2,sticky=W)
		
		self.alertButton = Button(self, text='下载',command=self.gorun)
		self.alertButton.grid(row=1,column=1,sticky=E)

	def cddir(self):
		keyword=self.nameInput.get()
		os.chdir('C:\\Users\\Administrator\\Desktop\\')
		if os.path.exists(keyword) ==False:
			os.mkdir(keyword)
		os.chdir(keyword)
		
	def gorun(self):
		self.cddir()
		word=self.nameInput.get()
		x=0
		for i in range(5):
			t=threading.Thread(target=self.xiazai,args=(x,word,))
			t.start()
			x+=20
			if i == 4:
				t.join()
				self.delfile()
				if self.picys.get() == 1:
					self.suoxiao()
	def xiazai(self,page,word):
		baidupn=self.school.student=page
		num=1
		for i in range(50):
			url='https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8'
			payload={'word':word,'pn':baidupn}
			html = requests.get(url,params=payload).text
			regular='"objURL":"(.*?)",'
			pic=re.findall(regular,html)
			baidupn+=100

			for tu in pic:
				try:
					dl=requests.get(tu,timeout=60)
					pic_name=os.path.basename(tu)
					if pic_name in os.walk(os.getcwd()):
						continue
					else:
						if ('?' in pic_name) or ('&' in pic_name) or ('.' not in pic_name):
							pic_name='%s%s' %(num,'.jpg')
						with open(pic_name,"wb") as code:
							code.write(dl.content)
							requests.session().keep_alive = False
							dl.close()
						num+=1
				except requests.exceptions.ConnectionError:
					#print('这张图片下载失败了,图片地址',tu)
					continue
		
	def suoxiao(self):
		self.cddir()
		filedir=os.walk(os.getcwd())
		for i in filedir:
			for tplb in i[2]:
				if ('jpg' in tplb) or ('jpeg' in tplb):
					try:
						im=Image.open(tplb)
						w,h=im.size
						if w > 500:
							im.thumbnail((w//2,h//2))
							im.save(tplb,'jpeg')
						im.close()
					except OSError:
						print('跳过此文件')

	def md5sum(self,filename):
		f=open(filename, 'rb')
		md5=hashlib.md5()
		while True:
			fb = f.read(8096)
			if not fb:
				break
			md5.update(fb)
		f.close()
		return (md5.hexdigest())

	def delfile(self):
		all_md5={}
		self.cddir()
		filedir=os.walk(os.getcwd())
		for i in filedir:
			for tlie in i[2]:
				if self.md5sum(tlie) in all_md5.values():
					os.remove(tlie)
				else:
					all_md5[tlie]=self.md5sum(tlie)



app=Application()
app.master.title('图片下载器')
app.mainloop()

  

 

无耻的求一下赞助

转载于:https://www.cnblogs.com/guoyabin/p/6873435.html

相关文章:

  • 《Netty官方文档》本地传输接口
  • tomcat java.lang.OutOfMemoryError: PermGen space解决
  • OTL调用存储过程/函数及注意事项
  • Yahoo的流计算引擎基准测试
  • Js基本方法
  • 【Java集合源代码剖析】TreeMap源代码剖析
  • Transient修饰符的使用
  • 【算法】 算法和数据结构绪论
  • 【转】Servlet 生命周期、工作原理
  • Openssl源代码整理学习---含P7/P10/P12说明
  • LeetCode OJ 之 Ugly Number II (丑数-二)
  • [计算机术语]缺省
  • (一)Thymeleaf用法——Thymeleaf简介
  • 【Python】 命名空间与LEGB规则
  • 通用的进程监控脚本process_monitor.sh使用方法
  • 【译】JS基础算法脚本:字符串结尾
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017年终总结、随想
  • Apache Zeppelin在Apache Trafodion上的可视化
  • C# 免费离线人脸识别 2.0 Demo
  • canvas 五子棋游戏
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript设计模式系列一:工厂模式
  • Mac转Windows的拯救指南
  • mysql 5.6 原生Online DDL解析
  • vue:响应原理
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何设计一个比特币钱包服务
  • 首页查询功能的一次实现过程
  • 用 Swift 编写面向协议的视图
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # 计算机视觉入门
  • #Ubuntu(修改root信息)
  • #在 README.md 中生成项目目录结构
  • (23)Linux的软硬连接
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转载)从 Java 代码到 Java 堆
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 调用php,php 调用.net com组件 --
  • .NET 中的轻量级线程安全
  • .NET处理HTTP请求
  • .net反编译的九款神器