最近学习吉他,一张一张保存吉他谱太麻烦,写个小程序下载吉他谱。

安装 BeautifulSoup,BeautifulSoup是一个解析HTML的库。
pip install BeautifulSoup4

在这个程序中 BeautifulSoup 使用 html5lib 所以还要安装 html5lib
pip install html5lib

代码如下:

  1. # -*- coding: utf-8 -*-
  2. #coding=UTF8
  3.  
  4. import os
  5. import sys
  6. import logging
  7. import urllib
  8. import urllib2
  9. import chardet
  10. import re
  11. import cookielib
  12. import urlparse
  13.  
  14. from bs4 import BeautifulSoup
  15.  
  16. sysEncoding = sys.getfilesystemencoding()
  17. cookieJar = cookielib.CookieJar()
  18.  
  19. def get(url):
  20.  
  21. req = urllib2.Request(url)
  22.  
  23. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
  24. response = opener.open(req)
  25.  
  26. return response.read()
  27.  
  28. def download_guitar_image(url, target):
  29.  
  30. print 'start download guitar image ...'
  31.  
  32. req = urllib2.Request(url)
  33. req.add_header('Accept','image/webp,image/*,*/*;q=0.8')
  34.  
  35. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
  36. response = opener.open(req)
  37.  
  38. content = response.read()
  39.  
  40. with open(target, 'wb') as code:
  41. code.write(content)
  42.  
  43. #解析吉他谱图片页面链接地址
  44. def parse_guitar_img_link():
  45.  
  46. page_list = []
  47.  
  48. url_base = 'http://www.17jita.com/'
  49.  
  50. page = 1
  51. while True:
  52.  
  53. url = url_base + 'tab/img/index.php?page=' + str(page)
  54.  
  55. print url
  56.  
  57. html = get(url)
  58.  
  59. soup = BeautifulSoup(html, "html5lib")
  60.  
  61. list = soup.select('#ct dl > dt > a')
  62.  
  63. if not list:
  64. break
  65.  
  66. for item in list:
  67. page_list.append({ 'title' : item.text, 'link' : url_base + item['href'] })
  68.  
  69. page += 1
  70.  
  71. return page_list
  72.  
  73. def download_guitar_image_link_list(url):
  74.  
  75. image_link_list = []
  76.  
  77. page = 1
  78.  
  79. while True:
  80.  
  81. page_url = url
  82.  
  83. if page > 1:
  84. page_url = url.replace('.html', '' + str(page) + '.html')
  85.  
  86. try:
  87.  
  88. html = get(page_url)
  89.  
  90. soup = BeautifulSoup(html, 'html5lib')
  91.  
  92. img_list = soup.select('#article_contents a > img')
  93.  
  94. for img in img_list:
  95. image_link_list.append(img['src'])
  96.  
  97. except urllib2.URLError, e:
  98. msg = u'下载 ' + page_url + u' 出错, 原因: ' + e.reason
  99. print msg
  100. logging.error(msg)
  101. break
  102.  
  103. page += 1
  104.  
  105. return image_link_list
  106.  
  107. if __name__ == '__main__':
  108.  
  109. logging.basicConfig(
  110. level=logging.DEBUG,
  111. format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  112. datefmt='%Y-%m-%d %H:%M:%S',
  113. filename='guitar.log',
  114. filemode='a')
  115.  
  116. path = 'guitar'
  117. if not os.path.exists(path):
  118. os.mkdir(path)
  119.  
  120. page_list = parse_guitar_img_link()
  121. for page in page_list:
  122.  
  123. print page['link'] + '(' + page['title'] + ')'
  124.  
  125. guitar_path = path + '/' + (page['title']).encode('GBK')
  126. if not os.path.exists(guitar_path):
  127. os.mkdir(guitar_path)
  128.  
  129. image_link_list = download_guitar_image_link_list(page['link'])
  130. for image_link in image_link_list:
  131.  
  132. print '\t' + image_link
  133.  
  134. filename = image_link[image_link.rindex('/'):]
  135.  
  136. filepath = guitar_path + filename.encode('GBK')
  137.  
  138. download_guitar_image(image_link, filepath)

程序中还存在一些问题尚优化,比如下载中断,不能下载剩下的吉他谱。

Python爬取17吉他网吉他谱的更多相关文章

  1. Python爬取中国天气网

    Python爬取中国天气网 基于requests库制作的爬虫. 使用方法:打开终端输入 “python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个 ...

  2. (python爬取小故事网并写入mysql)

    前言: 这是一篇来自整理EVERNOTE的笔记所产生的小博客,实现功能主要为用广度优先算法爬取小故事网,爬满100个链接并写入mysql,虽然CS作为双学位已经修习了三年多了,但不仅理论知识一般,动手 ...

  3. python爬取天气后报网

    前言 大二下学期的大数据技术导论课上由于需要获取数据进行分析,我决定学习python爬虫来获取数据.由于对于数据需求量相对较大,我最终选择爬取 天气后报网,该网站可以查询到全国各地多年的数据,而且相对 ...

  4. Python 爬取煎蛋网妹子图片

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-24 10:17:28 # @Author : EnderZhou (z ...

  5. Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称

    爬取CBO中国票房网所有电影片名和演员名字 # -*- coding: utf-8 -*- # 爬取CBO中国票房网所有电影片名 import json import requests import ...

  6. python爬取斗图网中的 “最新套图”和“最新表情”

    1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...

  7. 适合初学者的Python爬取链家网教程

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TinaLY PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  8. python爬取中国知网部分论文信息

    爬取指定主题的论文,并以相关度排序. #!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import linecache impor ...

  9. python爬取千库网

    url:https://i588ku.com/beijing/0-0-default-0-8-0-0-0-0-1/ 有水印 但是点进去就没了 这里先来测试是否有反爬虫 import requests ...

随机推荐

  1. 万能的Entry,两个变量的Model/JavaBean再也不用写了!

    前言 很多时候传数据需要只含两个变量的Model/JavaBean,但就为了两个变量去写一个Model/JavaBean实在是麻烦,而且类型固定重用性低.比如: 1.网格显示的头像-名称 需要 Str ...

  2. 使用Mou 编写Markdown编辑器博客

    Mou Overview Mou, the missing Markdown editor for web developers. Syntax Strong and Emphasize strong ...

  3. JAVA_Gson

    package com.qf.mobiletrain01; import java.util.List; import com.google.gson.Gson; import com.google. ...

  4. Spring 4 Ehcache Configuration Example with @Cacheable Annotation

    http://www.concretepage.com/spring-4/spring-4-ehcache-configuration-example-with-cacheable-annotatio ...

  5. 通过代码创建label 计算最佳尺寸 让其自适应文本高度或宽度

    通过xib创建label  让label随着文本内容的变化而动态改变尺寸比较简单  只要不固定死尺寸就可以了  但是通过代码创建的话我们需要给label设置一个frame  否则label默认是没有尺 ...

  6. form表单按enter键自动提交的问题

    废话不多说.直接上代码. 1:form表单按enter键自动提交的情况 <!doctype html> <html lang="en"> <head& ...

  7. MySQL - 日志管理

    在 MySQL 中,有 4 种不同的日志,分别是错误日志.二进制日志.查询日志和慢查询日志. 错误日志 错误日志记录了 MySQL 启动和停止时以及服务器在运行过程中发生严重错误时的相关信息. 查看错 ...

  8. 【MINA】OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor的事件监听线程池的选择

    mina中有两个线程池概念 1.处理监听建立连接的线程池  2.处理读写事件的线程池 本文中主要探讨读写事件的线程池的选择 这两种都经过实际项目的使用和检测,说说优缺点 早期的项目是用Unordere ...

  9. 反汇编windows htonl()函数

    因为自己在系统内核写网络程序有时候需要调用htons htonl 这样的函数进行转换,但由于内核只能调用c运行库,别的API不能调用.自己也接触过一点汇编,从来没有去学过.看过老码识途这本书前几章,如 ...

  10. 深入了解webkit内核第一篇:JavaScript引擎深度解析

    看到HorkeyChen写的文章<[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现>,写的很好,深受启发.想补充一些Horkey没有写到的 ...