歌谱简谱网的小爬虫,用着贼爽!

歌谱简谱网的乐谱,一个一个下载感兴趣的歌谱图片费时费力,没有效率,很不痛快。

干脆弄条爬虫,喜欢哪首乐谱,就把乐谱所在的网址粘贴进去,就行啦,爬虫帮你自动建立文件夹下载到本地,用着贼爽!

网站地址: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()

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最懂编程的医生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值