学了一下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()

  

无耻的求一下赞助

python写的百度图片爬虫的更多相关文章

  1. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

  2. 用python写一个百度翻译

    运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...

  3. 用 Python 批量下载百度图片

    ​ 为了做一个图像分类的小项目,需要制作自己的数据集.要想制作数据集,就得从网上下载大量的图片,再统一处理. 这时,一张张的保存下载,就显得很繁琐.那么,有没有一种方法可以把搜索到的图片直接下载到本地 ...

  4. 百度图片爬虫-python版

               self.browser=imitate_browser.BrowserBase()            self.chance=0            self.chanc ...

  5. python 百度图片爬虫

    # -*- coding:utf-8 -*- #https://blog.csdn.net/qq_32166627/article/details/60882964 import requests i ...

  6. Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)

    这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧 ...

  7. python写的百度贴吧相册下载

    突然想搞个这样的工具,写来写去都不知道在干嘛了,本来两个文件,现在整合在一起了. 乱得不行,懒得整理了,能用就行. 下载部分用了多线程,但是下载一个文件还是用的单线程,也就是没管http头的range ...

  8. 【python小练】图片爬虫之BeautifulSoup4

    Python3用不了Scrapy! Python3用不了Scrapy! Python3用不了Scrapy! [重要的事情说三遍,据说大神们还在尝试把scrapy移植到python3,特么浪费我半个小时 ...

  9. python爬取百度图片

    import requests import re from urllib import parse import os from threading import Thread def downlo ...

随机推荐

  1. 【Java】注解Annotation

    注解 Annotation 理解Annotation jdk 5.0 新增的功能 Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理.通 ...

  2. func-spring-boot-starter 快速上手

    func-spring-boot-starter test 项目地址 func-spring-boot-starter项目地址: https://gitee.com/yiur/func-spring- ...

  3. day 20 C语言顺序结构基础3

    (1).若有定义:int a=100:则语句printf("%d%d%d\n",sizeof("a"),sizeof(a),sizeof(3.14)); 则输出 ...

  4. 02-JS中的数据类型及类型转换

    02-JS中的数据类型及类型转换 一.数据类型 JS中的值,无论是字面量还是变量,都有明确的类型. (一)概述 1.基本类型5种 number 数字类型 string 字符串类型 boolean 布尔 ...

  5. JUC之线程池基础与简单源码分析

    线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任 ...

  6. 搭建服务器之FTP

    FTP服务器,使用软件vsftpd,服务守护进程也是vsftpd.客户端访问的话可以用浏览器或ftp命令行. 1.yum install vsftpd.安装简单主要是配置,这个比httpd复杂点的地方 ...

  7. npm 和 yarn 前端包管理工具

    前言 前端开发逐渐工程化,npm作为我们的依赖管理工具起到十分重要的作用,本文就来总结一下 npm 和 yarn 相关知识点. 正文 1.什么是npm (1)node的包管理器(node packag ...

  8. Docker 与 K8S学习笔记(十九)—— Pod的配置管理

    我们在部署应用时常常会考虑将应用程序与配置文件相分离,这样可以使应用程序更好的复用,并且通过不同配置也能实现更灵活的功能.将应用制作成镜像后,我们可以在启动容器时通过环境变量或挂载文件的方式注入,但是 ...

  9. vi与vim编辑器与解决vim编辑异常

    目录 一:vi与vim编辑器 二:解决vim编辑异常 一:vi与vim编辑器 vim是vi的升级版编辑器,就是vim比vi丰富一些. 1.安装vim 命令 yum install vim -y 2.打 ...

  10. 一起来找茬:记一起 clang 开启 -Oz 选项引发的血案

    作者:字节跳动终端技术 -- 刘夏 前言 笔者来自字节跳动终端技术 AppHealth (Client Infrastructure - AppHealth) 团队,在工作中我们会对开源 LLVM 及 ...