@从爬取图片 开始讲起
从上图可以大致看出,为了让操作更加方面,我用pyqt5做了一个界面(关于python gui工具的选型后面介绍),代码方面的话,其实主要就是爬取图片的代码和界面实现的代码,整体来说很简单,但是因为入门实例,一开始还是踩了不少坑的,这篇文章主要内容其实就是记录新手入门时一些需要注意的点
search.py里的主代码,相当于c/c++的main 程序入口,主要操作就是实例化主窗口,绑定相关响应函数(按钮和菜单项)
if __name__ == '__main__': # 1
app = QApplication(sys.argv) # 2
main_window = QMainWindow() # 3
ui = search_main_window.Ui_MainWindow() # 4创建窗口
ui.setupUi(main_window) # 将生成的mainwindow去初始化窗口数据
main_window.show() # 调用显示函数
ui.start.clicked.connect(partial(click_button_start, ui)) # 绑定开启线程函数
ui.action_Preferences.triggered.connect(partial(openDialog, ui)) #绑定一个菜单项来打开对话框
sys.exit(app.exec_()) # 开始循环
ui.start.clicked.connect(partial(click_button_start, ui))
ui.action_Preferences.triggered.connect(partial(openDialog, ui))
这两行可以简单讲一下,ui是窗口资源名称,start是里面的一个按钮(也就是最上面图中的“开始下载”),按钮的可以通过调用connect函数来绑定响应函数,不要参数的话直接 .connect(响应函数名称) 就行了,要传参数的话就 用partial 如上。 而action_Preferences是一个菜单
项,它是没有connect函数的,所以绑定方法为 .triggered.connect() ,具体原因的话可以从下面的初始化函数可以看出
self.start = QtWidgets.QPushButton(self.centralwidget)
self.action_saveDir = QtWidgets.QAction(MainWindow)
它们是继承自不同的父类,详细原因请自查
从最基本的说起,网页请求用的是requests模块,
def geturlDeatil(url):
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)''Chrome/51.0.2704.63 Safari/537.36'}
r = requests.get(url, timeout=30, headers=headers, verify=False)
r.raise_for_status() # 如果状态不是200,引发异常
r.encoding = 'utf-8' # 无论原来用什么编码,都改成utf-8
return r.text
except Exception as e:
return "访问网站异常"
这里要注意的是requests.get()这个函数要记得加上headers,主要是用来模拟浏览器访问,很多网站现在都做了反爬虫设置,不加的话,不加header的话,基本上是访问不了的,另外有些网站会做反盗链设计,需要额外增加信息,具体做法是:增加(‘Referer’, str1)字段,如下
def getPicture(listUrl, savePath):
countDown = 0
countDele = 0
# 获取当前图片网址
str1 = listUrl[0]
str2 = str1.rsplit('/', 1)
str1 = str2[0]
opener = urllib.request.build_opener() #
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36'), ('Referer', str1)]
urllib.request.install_opener(opener)
for i in range(len(listUrl)):
try:
path = savePath + str(i) + ".jpg"
urllib.request.urlretrieve(listUrl[i], path)
fp = open(path, 'rb')
im = Image.open(fp)
fp.close()
x, y = im.size
if x < 1920 or y < 1080:
os.remove(path)
countDele += 1
else:
countDown += 1
except Exception:
continue
return "下载图片成功", countDown, countDele
本来是不打算做界面的,后来一想,反正都是初学python,就当时练习一下了,因为之前有用qt写过c++,所以在网上看到qt有支撑python的库,名为pyqt5,所以就直接拿来用了,具体的话需要安装pyqt5的库,和pyqt5designer ,需要的可以去网上找教程安装
我这里一共做了两个界面,一个主界面search_main_window.py,一个对话框界面preferences.py ,都是通过qt designer 生成的ui文件转换过来的,转换的命令是
pyqt5 ui文件生成py命令
pyuic5 -o name.py name.ui
爬取图片这个实例算是很多人入门python的必经之路了,网上的例子也是非常的多,技术方面我就不再说了,关于网址选择方面有一些建议
常用网址有:
这次算是检验python学习效果的一次练习,学了python之后确实印证了那句老话:“人生苦短,我用python” ,用来写一些小工具确实非常的方便。
代码在github上:https://github.com/Blakeyi/DownloadPic
csdn资源也有:https://download.csdn.net/download/blake321/12391015
就这么多了,今年五一哪里都没去,在家学python