Python-一键爬取图片、音频、视频资源

前言

使用Python爬取任意网页的资源文件,比如图片、音频、视频;一般常用的做法就是把网页的HTML请求下来通过XPath或者正则来获取自己想要的资源,这里我做了一个爬虫工具软件,可以一键爬取资源 媒体文件;但是需要说明的是,这里爬取资源文件只针对HTML已有的文件,如果需要二次请求的是爬取不到的,比如酷狗音乐播放界面,因为要做通用工具,匹配不同的网站!!!???

这里主推图片爬取,一些需要图片素材的可以输入网址一键爬取!

还有就是爬取视频的时候会把磁力链接爬取下来!可以使用第三方下载工具下载!?

代码

爬取资源文件

这里需要说明的就只,有的图片资源并不是url链接,是data:image格式,这里需要转换一下存储!

def getResourceUrlList(url ,isImage, isAudio, isVideo):
	global imgType_list, audioType_list, videoType_list
	imageUrlList = []
	audioUrlList = []
	videoUrlList = []

	url = url.rstrip().rstrip('/')
	htmlStr = str(requestsDataBase(url))
	# print(htmlStr)
	
	Wopen = open('reptileHtml.txt','w')
	Wopen.write(htmlStr)
	Wopen.close()

	Ropen = open('reptileHtml.txt','r')
	imageUrlList = []

	for line in Ropen:
		line = line.replace("'", '"')
		segmenterStr = '"'
		if "'" in line:
			segmenterStr = "'"

		lineList = line.split(segmenterStr)
		for partLine in lineList:
			if isImage == True:
				# 查找图片
				if 'data:image' in partLine:
					base64List = partLine.split('base64,')
					imgData = base64.urlsafe_b64decode(base64List[-1] + '=' * (4 - len(base64List[-1]) % 4))
					base64ImgType = base64List[0].split('/')[-1].rstrip(';')
					imageName = zfjTools.getTimestamp() + '.' + base64ImgType
					imageUrlList.append(imageName + '$==$' + base64ImgType)

				# 查找图片
				for imageType in imgType_list:
					if imageType in partLine:
						imgUrl = partLine[:partLine.find(imageType) + len(imageType)].split(segmenterStr)[-1]

						# 修复URL
						imgUrl = repairUrl(imgUrl, url)

						sizeType = '_{' + 'size' + '}'
						if sizeType in imgUrl:
							imgUrl = imgUrl.replace(sizeType, '')

						imgUrl = imgUrl.strip()

						if imgUrl.startswith('http://') or imgUrl.startswith('https://') and imgUrl not in imageUrlList:
							imageUrlList.append(imgUrl)
						else:
							imgUrl = ''

			if isAudio == True:
				# 查找音频
				for audioType in audioType_list:
					if audioType in partLine or audioType.lower() in partLine:
						audioType = audioType.lower() if audioType.lower() in partLine else audioType
						audioUrl = partLine[:partLine.find(audioType) + len(audioType)].split(segmenterStr)[-1]

						# 修复URL
						audioUrl = repairUrl(audioUrl, url)

						if audioUrl.startswith('http://') or audioUrl.startswith('https://') and audioUrl not in audioUrlList:
							audioUrlList.append(audioUrl)
						else:
							audioUrl = ''

			if isVideo == True:
				# 查找视频
				for videoType in videoType_list:
					if videoType in partLine or videoType.lower() in partLine:
						videoType = videoType.lower() if videoType.lower() in partLine else videoType
						videoUrl = partLine[:partLine.find(videoType) + len(videoType)].split(segmenterStr)[-1]

						# 修复URL
						videoUrl = repairUrl(videoUrl, url)

						if videoUrl.startswith('http://') or videoUrl.startswith('https://') or videoUrl.startswith('ed2k://') or videoUrl.startswith('magnet:?') or videoUrl.startswith('ftp://') and videoUrl not in videoUrlList:
							videoUrlList.append(videoUrl)
						else:
							videoUrl = ''

	return (imageUrlList, audioUrlList, videoUrlList)

爬取自定义节点

# 统配节点爬取
def getNoteInfors(url, fatherNode, childNode):
	url = url.rstrip().rstrip('/')
	htmlStr = requestsDataBase(url)
	
	Wopen = open('reptileHtml.txt','w')
	Wopen.write(htmlStr)
	Wopen.close()

	html_etree = etree.HTML(htmlStr)

	dataArray = []

	if html_etree != None:
		nodes_list = html_etree.xpath(fatherNode)
		for k_value in nodes_list:
			partValue = k_value.xpath(childNode)
			if len(partValue) > 0:
				dataArray.append(partValue[0])

	return dataArray

软件

软件下载地址https://gitee.com/zfj1128/ZFJObsLib_dmg

资源爬取:链接:https://pan.baidu.com/s/1xa9ruF_hMcN49716BJUx2w  密码:1zpg

节点爬取:链接:https://pan.baidu.com/s/1ebWWYtjoKkiH9mqakR6EMQ  密码:cosa

使用截图如下:

结束语

欢迎各位大佬提出宝贵的意见和建议,也欢迎大家进群交流学习!!!!

 

已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件课程案例代码完全开放给你,你可以根据所学知识,自行修改优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页