背景
初衷
作爲一直曾經致力於做文藝青年的爬蟲狗,偶爾還是想擼個吉他的,也買過三月通之類的書,但是上面的譜子要麼太老,要麼太難,所以一直以來都志利於在網上找譜,打印下來或者用kindle或ipad看,着實方便不少。
網站:愛樂譜
其中,愛樂譜是我比較喜歡的網站,界面相對簡潔直觀,並且譜子很清晰,關鍵都還很簡單(在這裏不我得不黑一下大偉老師的譜子,雖然好聽但是相對複雜,對初學者太不友好)。對於我這樣一個平時沒有太多時間練習並只是想偶爾裝裝逼不求上進的初學者來說,再合適不過了。
缺點
愛樂譜雖好,但是吊絲還是不能滿足的,原因有三:
1. 界面廣告多影響體驗,有彈窗(可以攔截)
2. 單獨一張張手動保存太麻煩,關鍵每次還得重新命名,一般一個吉他譜還好幾頁,還需要編號,不然之後不好找。
3. 網站提供的“下載此樂譜”選項太坑爹,每次都要輸入廣告詞(買吉他上約瑟網)才行,下載下來的也是純數字編碼的沒有漢語名稱,還得我手動添加,再複製到統一一個文件夾中,實在太不geek了
需求
- 用爬蟲爬取該網站需要的譜子的對應網頁的圖片並保存
- 將gif格式的圖片合成到同一個pdf中,並命名爲該吉他譜的名稱
- 刪除原gif圖片
實現
具體思路就不說了,直接寫
- 環境:ubuntu,python2.7
- 爬蟲需要第三方庫:BeautifulSoup,urllib2, urllib,re(純屬爲了熟練工具才用了這麼多個。。。)
- 格式轉換工具:reportlab(安裝需要註冊,貌似有別的更簡單的工具,但是配套文檔和參考資料少就沒有用)
代碼如下:
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import urllib2, urllib
import re
from reportlab.pdfgen import canvas
import os
#一些初始化
i = 1
url = 'http://www.yuesir.com/ipu/1504.html'
#獲取html
request = urllib2.Request(url)
response = urllib2.urlopen(request)
html = response.read()#.decode('gbk')
# 獲取標題
bs = BeautifulSoup(html)
title=bs.find("h2").string.split(' ')[0]# 把後面難看的‘吉他譜’三個字去掉
print title
# 獲取url
pattern = re.compile('<img class="page-post-main-content-list-item-img" src="(.*?)".*?')
items = re.findall(pattern,html)
#初始化pdf
c = canvas.Canvas(title+".pdf")
#下載圖片並添加到pdf中並保存
for item in items:
print item
# 寫入圖片
u = urllib.urlopen(item)
data = u.read()
name = title + str(i)
f = open(name, 'wb')
f.write(data)
f.close()
i = i+1
#寫入pdf
dim=c.drawImage(name,0,0)
c.setPageSize(dim)
c.showPage()
#刪除原gif
os.remove(name)
c.save()
TODO
- 添加到命令行或網站,實現直接輸入吉他譜名字即可選擇合適的譜子直接爬取
- 添加下載或者發送到郵箱和kindle的功能