Python爬取17吉他網吉他譜,python吉他譜

來源:互聯網
上載者:User

Python爬取17吉他網吉他譜,python吉他譜

最近學習吉他,一張一張儲存吉他譜太麻煩,寫個小程式下載吉他譜。

安裝 BeautifulSoup,BeautifulSoup是一個解析HTML的庫。
pip install BeautifulSoup4

在這個程式中 BeautifulSoup 使用 html5lib 所以還要安裝 html5lib
pip install html5lib

代碼如下:

# -*- coding: utf-8 -*-#coding=UTF8import osimport sysimport loggingimport urllibimport urllib2import chardetimport reimport cookielibimport urlparsefrom bs4 import BeautifulSoupsysEncoding = sys.getfilesystemencoding()cookieJar = cookielib.CookieJar()def get(url):    req = urllib2.Request(url)        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))    response = opener.open(req)        return response.read()def download_guitar_image(url, target):        print 'start download guitar image ...'    req = urllib2.Request(url)    req.add_header('Accept','image/webp,image/*,*/*;q=0.8')    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))    response = opener.open(req)        content = response.read()        with open(target, 'wb') as code:        code.write(content)#解析吉他譜圖片頁面連結地址def parse_guitar_img_link():        page_list = []        url_base = 'http://www.17jita.com/'        page = 1    while True:                url = url_base + 'tab/img/index.php?page=' + str(page)                print url                html = get(url)                soup = BeautifulSoup(html, "html5lib")                list = soup.select('#ct dl > dt > a')                if not list:            break                for item in list:            page_list.append({ 'title' : item.text, 'link' : url_base + item['href'] })                        page += 1        return page_list            def download_guitar_image_link_list(url):        image_link_list = []        page = 1        while True:            page_url = url        if page > 1:            page_url = url.replace('.html', '' + str(page) + '.html')                    try:                    html = get(page_url)                        soup = BeautifulSoup(html, 'html5lib')                        img_list = soup.select('#article_contents a > img')                for img in img_list:                image_link_list.append(img['src'])                    except urllib2.URLError, e:            msg = u'下載 ' + page_url + u' 出錯, 原因: ' + e.reason            print msg            logging.error(msg)            break                page += 1    return image_link_listif __name__ == '__main__':        logging.basicConfig(        level=logging.DEBUG,        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',        datefmt='%Y-%m-%d %H:%M:%S',        filename='guitar.log',        filemode='a')            path = 'guitar'    if not os.path.exists(path):        os.mkdir(path)    page_list = parse_guitar_img_link()    for page in page_list:                print page['link'] + '(' + page['title'] + ')'                guitar_path = path + '/' + (page['title']).encode('GBK')        if not os.path.exists(guitar_path):            os.mkdir(guitar_path)            image_link_list = download_guitar_image_link_list(page['link'])        for image_link in image_link_list:                        print '\t' + image_link                        filename = image_link[image_link.rindex('/'):]                        filepath = guitar_path + filename.encode('GBK')                        download_guitar_image(image_link, filepath)                            

程式中還存在一些問題尚最佳化,比如下載中斷,不能下載剩下的吉他譜。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.