学了一下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. Python多环境管理神器(pyenv)

    前面我们已经介绍了,python中两种最基础的虚拟环境管理工具,venv和virtualenv,其中virtualenv可以和virtualenvwrapper配合使用.详情请参考:https://w ...

  2. JUC之读写锁问题

    读写锁 读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞.读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升 ...

  3. 【C++】字符串处理

    字符串处理 标签:c++ 目录 字符串处理 一.输入 1. scanf()函数 2. gets()函数 3. getchar()函数 二.输出 1. printf()函数 2. puts()函数: 3 ...

  4. [Anti-AV] 从攻防对抗辩证性分析jsp免杀(一)

    从攻防对抗辩证性分析jsp免杀 从最早的最朴素木马 <%@ page import="java.io.InputStream" %> <%@ page impor ...

  5. Servlet三种创建方式

    直接实现 Servlet 接口不太方便,所以 Servlet 又内置了两个 Servlet 接口的实现类(抽象类),分别为 GenericServlet 和 HttpServlet,因此,创建 Ser ...

  6. golang中函数的可变参数

    package main import "fmt" // 一个函数中最多只可有一个可变参数, 如果参数列表中还有其它类型的参数,则可变参数写在最后 // 注意:参数不定,参数的个数 ...

  7. gin中只绑定url查询字符串

    package main import ( "github.com/gin-gonic/gin" "log" ) type Person struct{ Nam ...

  8. 集合框架-TreeSet集合

    1 package cn.itcast.p5.treeset.demo; 2 3 import java.util.Iterator; 4 import java.util.TreeSet; 5 6 ...

  9. Ventoy的UEFI模式安全启动操作说明

    Ventoy 1.0.07 版本开始支持 Secure Boot (安全启动),但是这个方案不是非常的完美,会导致在一些机器上不管BIOS里安全启动是否关闭都不能正常工作.因此从 1.0.09 版本开 ...

  10. python 如何获取当前系统的时间

    1.导入包 import datetime 2.获取当前的时间 curr_time = datetime.datetime.now() # 2019-07-06 14:55:56.873893 < ...