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)

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

时间: 2024-10-11 18:27:05

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

Python爬取中国天气网天气

Python爬取中国天气网天气 基于requests库制作的爬虫. 使用方法:打开终端输入 "python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个"data.csv"文件,内容请参考链接:https://www.cnblogs.com/Rhythm-/p/9255190.html 运行效果: 源码: import sys import re import requests import webbrowser from

第一篇博客(python爬取小故事网并写入mysql)

前言: 这是一篇来自整理EVERNOTE的笔记所产生的小博客,实现功能主要为用广度优先算法爬取小故事网,爬满100个链接并写入mysql,虽然CS作为双学位已经修习了三年多了,但不仅理论知识一般,动手能力也很差,在学习的空余时间前前后后DEBUG了很多次,下面给出源代码及所遇到的BUG. 本博客参照代码及PROJECT来源:http://kexue.fm/archives/4385/ 源代码: 1 import requests as rq 2 import re 3 import codecs

Python 爬取煎蛋网妹子图片

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Date : 2017-08-24 10:17:28 4 # @Author : EnderZhou ([email protected]) 5 # @Link : http://www.cnblogs.com/enderzhou/ 6 # @Version : $Id$ 7 8 import requests 9 from bs4 import BeautifulSoup as bs

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

爬取指定主题的论文,并以相关度排序. 1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 import requests 4 import linecache 5 import random 6 from bs4 import BeautifulSoup 7 8 if __name__=="__main__": 9 keywords='通信' ### 查询的主题 10 n=0 11 target='http://search.cnki.ne

使用Python爬取煎蛋网妹纸图片

import urllib.request import os import os.path import re def dir(dir_name="images"):     """设定图片保存目录,基于当前程序运行目录"""     if os.path.isdir(dir_name):         os.chdir(dir_name)     else:         os.mkdir(dir_name)     

python 爬取煎蛋网图片

__author__ = mkdir(path):     os     path = path.strip()  path = path.rstrip()  mkfile = os.path.exists(path)     mkfile:         ()     :         os.makedirs(path)         () urllib, urllib2, re geturl(url):     file_lists = []     req = urllib2.Req

python爬取煎蛋网图片

py2版本: #-*- coding:utf-8 -*-#from __future__ import unicode_literimport urllib,urllib2,timeimport re,sys,osheaders={'Referer':'http://jandan.net/','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2

python爬虫入门练习,使用正则表达式和requests爬取LOL官网皮肤

刚刚python入门,学会了requests模块爬取简单网页,然后写了个爬取LOL官网皮肤的爬虫,代码奉上 #获取json文件#获取英雄ID列表#拼接URL#下载皮肤 #导入re requests模块 import requestsimport reimport time def Download_LOL_Skin(): #英雄信息Json文件地址:https://lol.qq.com/biz/hero/champion.js #获取英雄信息列表 json_url = "https://lol.

python爬虫教程:《利用Python爬取表情包》

python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!