本文主要是介绍歌谱简谱网的小爬虫,用着贼爽!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
歌谱简谱网的乐谱,一个一个下载感兴趣的歌谱图片费时费力,没有效率,很不痛快。
干脆弄条爬虫,喜欢哪首乐谱,就把乐谱所在的网址粘贴进去,就行啦,爬虫帮你自动建立文件夹下载到本地,用着贼爽!
网站地址:http://www.yidianqiuxun.com
具体代码如下:
import re
import os
import requests
'''
使用方法:
代码复制到py文件中,保存,关闭,双击键入感兴趣的乐谱网址,即可下载
网址主页:http://www.yidianqiuxun.com学到的技能:
1.用re.sub('pattern','',title) 方法,处理文件名中非法字符
2.多种情况的模式匹配处理方法疑问:有没有高端的方法呢?'''headers = {"User-Agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}def filename_filter(title): ''' windows系统中文件名不能包含 \ / : * ? " < > |想要创建必须过滤掉这些字符 '''title = re.sub('[\/:*?"<>|]','',title)return titledef max_list(img_url_a,img_url_b,img_url_c):'''筛选出有效列表'''list_all = [img_url_a,img_url_b,img_url_c]max_num = max(len(img_url_a),len(img_url_b),len(img_url_c))for listx in list_all:if len(listx) == max_num:return listxdef download(url,title):print('正在下载:{}\n图片网址为:{}'.format(title.split('/')[-1],url))img_data = requests.get(url,headers=headers).contentwith open(title,'wb') as f:f.write(img_data)print('-'*65)def main():while True:url = input("\n还需要下载请输入歌谱网址(退出请输入q):")# url = 'http://www.yidianqiuxun.com/164713.html'if url == 'q':breakelse:# url = 'http://www.yidianqiuxun.com/164713.html'res = requests.get(url,headers=headers).text# print(res)#匹配标题titlepat1 = r'<h1 class="entry-title">(.*?)</h1>'title = re.compile(pat1).findall(res)[0]title = filename_filter(title)print('本乐谱名字为:',title)print('='*70)path = os.getcwd() + '/' + titleif not os.path.exists(path):os.makedirs(path)# 第1种情况pata = r'<img class="align.*?size-full wp-image-.*?" src="(http.*?)" alt="'img_url_a = re.compile(pata).findall(res) # 第2种情况patb = r'<img alt=".*?src="(http.*?)"'img_url_b = re.compile(patb).findall(res) # 第3种情况patc = r'<img src="(http.*?)" alt=".*?" border=".*?"'img_url_c = re.compile(patc).findall(res) # 筛选出有数据的列表 http://www.yidianqiuxun.com/22123.htmlimg_url = max_list(img_url_a,img_url_b,img_url_c)print(img_url)# 遍历并下载乐谱图片for i in range(len(img_url)):try:url_tail = img_url[i].split('.')[-1]title_jianpu = path + '/' + title + str(i+1).rjust(2,'0') + '.' + url_tail download(img_url[i],title_jianpu)except Exception as e:print(e)continueprint('下载结束:《{}》'.format(title))print('=*='*38)if __name__ == '__main__':main()
这篇关于歌谱简谱网的小爬虫,用着贼爽!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!