栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyqt5制作的百度图片爬取

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyqt5制作的百度图片爬取

from PyQt5.QtWidgets import *
import sys 
from PyQt5.QtCore import Qt
import requests
import aiohttp,re,asyncio,aiofiles
from lxml import etree 
import json

# 图片下载
async def claw(url,pathname):
	headers = {
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X metaSr 1.0"
	}
	try:
		async with aiohttp.ClientSession() as session:
			async with session.get(url,headers=headers) as res:
				pic = await res.content.read()
				async with aiofiles.open(pathname,'wb') as f:
					await f.write(pic)
					# print(pathname +"完成")
	except Exception as e:
		pass


# 图片链接获取
async def clawweb(url,path,n,key):
	task = []
	headers = {
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X metaSr 1.0"
	}
	params = {
		"tn": "resultjson_com",
		"logid": "6706688385989870117",
		"ipn": "rj",
		"ct": "201326592",
		"is": "",
		"fp": "result",
		"queryWord": key,
		"cl": "2",
		"lm": "-1",
		"ie": "utf-8",
		"oe": "utf-8",
		"adpicid": "",
		"st": "",
		"z": "",
		"ic": "",
		"hd": "",
		"latest": "",
		"copyright": "",
		"word": key,
		"s": "",
		"se": "",
		"tab": "",
		"width": "",
		"height": "",
		"face": "",
		"istype": "",
		"qc": "",
		"nc": "",
		"fr": "",
		"expermode": "",
		"nojc": "",
		"acjsonfr": "click",
		"pn": n*30,
		"rn": 30,
		"itg": 1,
		"gsm": "3c",
		"1633086944121":""
	}
	res = requests.get(url,params=params,headers=headers)
	# res.encoding='gzip'
	content = json.loads(res.text)
	for i in (content["data"])[0:len(content["data"])-1]:
		pathname = path + i["strategyAssessment"] + '.jpg'
		url = i["hoverURL"]
		task.append(asyncio.create_task(claw(url=url,pathname=pathname)))
	await asyncio.wait(task)

# 图形化界面
class clawpic(QWidget):
	def __init__(self):
		super().__init__()
		self.setUI()
		self.show()

	def setUI(self):
		# 创建控件

		#图片关键词
		self.pic_text = QLineEdit()
		self.pickey = QLabel()
		self.pickey.setText("图片关键字")
		self.pickey.setAlignment(Qt.AlignCenter)

		# 页数
		self.page_text = QLineEdit()
		self.page = QLabel()
		self.page.setText("起始页数")
		self.page.setAlignment(Qt.AlignCenter)

		self.page_text2 = QLineEdit()
		self.page2 = QLabel()
		self.page2.setText("最终页数")
		self.page2.setAlignment(Qt.AlignCenter)

		# 保存路径
		self.path_text = QLineEdit()
		self.pathbtu = QPushButton()
		self.pathbtu.setText("选择保存路径")
		self.pathbtu.clicked.connect(self.openpath)
		
		# 下载按钮
		self.download = QPushButton()
		self.download.setText("开始下载")
		self.download.clicked.connect(self.judgement)
				
		# 布局
		self.gridlayout = QGridLayout(self)

		self.gridlayout.addWidget(self.pic_text,0,0,1,1)
		self.gridlayout.addWidget(self.pickey,0,1,1,1)

		self.gridlayout.addWidget(self.page_text,1,0,1,1)
		self.gridlayout.addWidget(self.page,1,1,1,1)

		self.gridlayout.addWidget(self.page_text2,2,0,1,1)
		self.gridlayout.addWidget(self.page2,2,1,1,1)

		self.gridlayout.addWidget(self.path_text,3,0,1,1)
		self.gridlayout.addWidget(self.pathbtu,3,1,1,1)

		self.gridlayout.addWidget(self.download,4,0,1,2)

	def openpath(self):
		filename = QFileDialog.getExistingDirectory(self,"打开"," ",QFileDialog.ShowDirsOnly)
		self.path_text.setText(filename)
    
    # 开始运行爬取图片
	def downloadpic(self,key,page1,page2,path):				
		 
		url = "https://image.baidu.com/search/acjson?"
		for i in range(int(page1)-1,int(page2)):
			asyncio.run(clawweb(url=url,path=path + "/",n=i,key=key))
	# 判断输入框内容是否为空
	def judgement(self):
		key = self.pic_text.text()
		page1 = self.page_text.text()
		page2 = self.page_text2.text()
		path = self.path_text.text()
		if key == '':
			QMessageBox.warning(self,'警告','key不能为空!')
		elif page1 == '' or page2 == '':
			QMessageBox.warning(self,'警告','页数不能为空!')
		elif path == '':
			QMessageBox.warning(self,'警告','路径不能为空!')
		else:
			self.downloadpic(key=key,page1=page1,page2=page2,path=path)
			QMessageBox.information(self,'消息','下载完成!')


if __name__ == '__main__':
	app = QApplication(sys.argv)
	w = clawpic()
	sys.exit(app.exec_())

有关python协程内容请观看

协程与任务 — Python 3.9.7 文档

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290667.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号