爬取吉他谱并生成pdf
来源:互联网 发布:网络红人欲猫儿 编辑:程序博客网 时间:2024/03/29 17:23
背景
初衷
作为一直曾经致力于做文艺青年的爬虫狗,偶尔还是想撸个吉他的,也买过三月通之类的书,但是上面的谱子要么太老,要么太难,所以一直以来都志利于在网上找谱,打印下来或者用kindle或ipad看,着实方便不少。
网站:爱乐谱
其中,爱乐谱是我比较喜欢的网站,界面相对简洁直观,并且谱子很清晰,关键都还很简单(在这里不我得不黑一下大伟老师的谱子,虽然好听但是相对复杂,对初学者太不友好)。对于我这样一个平时没有太多时间练习并只是想偶尔装装逼不求上进的初学者来说,再合适不过了。
缺点
爱乐谱虽好,但是吊丝还是不能满足的,原因有三:
1. 界面广告多影响体验,有弹窗(可以拦截)
2. 单独一张张手动保存太麻烦,关键每次还得重新命名,一般一个吉他谱还好几页,还需要编号,不然之后不好找。
3. 网站提供的“下载此乐谱”选项太坑爹,每次都要输入广告词(买吉他上约瑟网)才行,下载下来的也是纯数字编码的没有汉语名称,还得我手动添加,再复制到统一一个文件夹中,实在太不geek了
需求
- 用爬虫爬取该网站需要的谱子的对应网页的图片并保存
- 将gif格式的图片合成到同一个pdf中,并命名为该吉他谱的名称
- 删除原gif图片
实现
具体思路就不说了,直接写
- 环境:ubuntu,python2.7
- 爬虫需要第三方库:BeautifulSoup,urllib2, urllib,re(纯属为了熟练工具才用了这么多个。。。)
- 格式转换工具:reportlab(安装需要注册,貌似有别的更简单的工具,但是配套文档和参考资料少就没有用)
代码如下:
# -*- coding:utf-8 -*-from bs4 import BeautifulSoupimport urllib2, urllibimport refrom reportlab.pdfgen import canvasimport os#一些初始化i = 1url = 'http://www.yuesir.com/ipu/1504.html'#获取htmlrequest = urllib2.Request(url)response = urllib2.urlopen(request)html = response.read()#.decode('gbk')# 获取标题bs = BeautifulSoup(html)title=bs.find("h2").string.split(' ')[0]# 把后面难看的‘吉他谱’三个字去掉print title# 获取urlpattern = re.compile('<img class="page-post-main-content-list-item-img" src="(.*?)".*?')items = re.findall(pattern,html)#初始化pdfc = 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的功能
0 0
- 爬取吉他谱并生成pdf
- 爬取并打印《ES6标准入门》PDF--Puppeteer初探
- springmvc 生成pdf,并下载
- springmvc 生成pdf,并下载
- python爬虫爬取豆瓣书籍信息并生成表格
- 水晶报表登陆问题并生成PDF
- 在线latex 并生成pdf网站:writelatex
- Android下生成pdf并显示中文
- Java 利用iText生成pdf并导出
- java 利用itext生成PDF并下载
- androdi开发生成pdf文件并显示
- Android使用iText生成pdf文件并读取pdf内容
- 动态生成控件并取值
- 生成PDF 并利用xls模板生成多个Sheet
- Java程序生成PDF,并生成加密二维码
- Python 爬取网页内容,转成PDF
- Python爬取网页转为PDF
- Python简单的爬取网页信息并生成json文件与乱码解决小记
- freeswitch时间结构体 switch_time_exp_t
- Jave学习1--Introduction to Java
- 2016 ccpc长春现场赛J Sequence II(hdu 5919)
- Java实现快速排序
- 微信开发(从申请到上线的一整套流程)第二章 启用开发模式
- 爬取吉他谱并生成pdf
- C 语言句柄handle
- [LeetCode]--118. Pascal's Triangle
- iOS开发bug消灭之:Could not cast value of type 'UINavigationController' to 'RedShirt.AddEmployeeTableVi...
- GetStdHandle
- ASP.NET MVC应用程序中实现国际化(结合使用AngularJS)
- CF 375(div 2) F题
- Android-屏幕知识总结
- 读书笔记