Python爬取17吉他网吉他谱
最近学习吉他,一张一张保存吉他谱太麻烦,写个小程序下载吉他谱。
安装 BeautifulSoup,BeautifulSoup是一个解析HTML的库。
pip install BeautifulSoup4
在这个程序中 BeautifulSoup 使用 html5lib 所以还要安装 html5lib
pip install html5lib
代码如下:
- # -*- coding: utf-8 -*-
- #coding=UTF8
- import os
- import sys
- import logging
- import urllib
- import urllib2
- import chardet
- import re
- import cookielib
- import urlparse
- from bs4 import BeautifulSoup
- sysEncoding = 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_list
- if __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)
程序中还存在一些问题尚优化,比如下载中断,不能下载剩下的吉他谱。
Python爬取17吉他网吉他谱的更多相关文章
- Python爬取中国天气网
Python爬取中国天气网 基于requests库制作的爬虫. 使用方法:打开终端输入 “python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个 ...
- (python爬取小故事网并写入mysql)
前言: 这是一篇来自整理EVERNOTE的笔记所产生的小博客,实现功能主要为用广度优先算法爬取小故事网,爬满100个链接并写入mysql,虽然CS作为双学位已经修习了三年多了,但不仅理论知识一般,动手 ...
- python爬取天气后报网
前言 大二下学期的大数据技术导论课上由于需要获取数据进行分析,我决定学习python爬虫来获取数据.由于对于数据需求量相对较大,我最终选择爬取 天气后报网,该网站可以查询到全国各地多年的数据,而且相对 ...
- Python 爬取煎蛋网妹子图片
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-24 10:17:28 # @Author : EnderZhou (z ...
- Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称
爬取CBO中国票房网所有电影片名和演员名字 # -*- coding: utf-8 -*- # 爬取CBO中国票房网所有电影片名 import json import requests import ...
- python爬取斗图网中的 “最新套图”和“最新表情”
1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...
- 适合初学者的Python爬取链家网教程
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TinaLY PS:如有需要Python学习资料的小伙伴可以加点击下 ...
- python爬取中国知网部分论文信息
爬取指定主题的论文,并以相关度排序. #!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import linecache impor ...
- python爬取千库网
url:https://i588ku.com/beijing/0-0-default-0-8-0-0-0-0-1/ 有水印 但是点进去就没了 这里先来测试是否有反爬虫 import requests ...
随机推荐
- 万能的Entry,两个变量的Model/JavaBean再也不用写了!
前言 很多时候传数据需要只含两个变量的Model/JavaBean,但就为了两个变量去写一个Model/JavaBean实在是麻烦,而且类型固定重用性低.比如: 1.网格显示的头像-名称 需要 Str ...
- 使用Mou 编写Markdown编辑器博客
Mou Overview Mou, the missing Markdown editor for web developers. Syntax Strong and Emphasize strong ...
- JAVA_Gson
package com.qf.mobiletrain01; import java.util.List; import com.google.gson.Gson; import com.google. ...
- Spring 4 Ehcache Configuration Example with @Cacheable Annotation
http://www.concretepage.com/spring-4/spring-4-ehcache-configuration-example-with-cacheable-annotatio ...
- 通过代码创建label 计算最佳尺寸 让其自适应文本高度或宽度
通过xib创建label 让label随着文本内容的变化而动态改变尺寸比较简单 只要不固定死尺寸就可以了 但是通过代码创建的话我们需要给label设置一个frame 否则label默认是没有尺 ...
- form表单按enter键自动提交的问题
废话不多说.直接上代码. 1:form表单按enter键自动提交的情况 <!doctype html> <html lang="en"> <head& ...
- MySQL - 日志管理
在 MySQL 中,有 4 种不同的日志,分别是错误日志.二进制日志.查询日志和慢查询日志. 错误日志 错误日志记录了 MySQL 启动和停止时以及服务器在运行过程中发生严重错误时的相关信息. 查看错 ...
- 【MINA】OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor的事件监听线程池的选择
mina中有两个线程池概念 1.处理监听建立连接的线程池 2.处理读写事件的线程池 本文中主要探讨读写事件的线程池的选择 这两种都经过实际项目的使用和检测,说说优缺点 早期的项目是用Unordere ...
- 反汇编windows htonl()函数
因为自己在系统内核写网络程序有时候需要调用htons htonl 这样的函数进行转换,但由于内核只能调用c运行库,别的API不能调用.自己也接触过一点汇编,从来没有去学过.看过老码识途这本书前几章,如 ...
- 深入了解webkit内核第一篇:JavaScript引擎深度解析
看到HorkeyChen写的文章<[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现>,写的很好,深受启发.想补充一些Horkey没有写到的 ...