歌谱简谱网的乐谱,一个一个下载感兴趣的歌谱图片费时费力,没有效率,很不痛快。
干脆弄条爬虫,喜欢哪首乐谱,就把乐谱所在的网址粘贴进去,就行啦,爬虫帮你自动建立文件夹下载到本地,用着贼爽!
网站地址: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 title
def 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 listx
def download(url,title):
print('正在下载:{}\n图片网址为:{}'.format(title.split('/')[-1],url))
img_data = requests.get(url,headers=headers).content
with 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':
break
else:
# url = 'http://www.yidianqiuxun.com/164713.html'
res = requests.get(url,headers=headers).text
# print(res)
#匹配标题title
pat1 = r'<h1 class="entry-title">(.*?)</h1>'
title = re.compile(pat1).findall(res)[0]
title = filename_filter(title)
print('本乐谱名字为:',title)
print('='*70)
path = os.getcwd() + '/' + title
if 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.html
img_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)
continue
print('下载结束:《{}》'.format(title))
print('=*='*38)
if __name__ == '__main__':
main()