爬取弹琴吧VIP乐谱

闲暇之余,总爱弹弹吉他。但是相信一部分初学者经常会因为找不到吉他谱而困扰,然后对于我这个小码农当然是,嘿嘿嘿,好了。不多说,入正文

爬取VIP专栏下分页面

先分析一下要爬取的主页面:http://www.tan8.com/guitar-245-0-collects-1-0.html&per_page=0

观察页面url变化,每翻页一次+20:http://www.tan8.com/guitar-245-0-collects-1-0.html&per_page=20

这样子我们就获取到了VIP专栏下,所有的子页面

def __init__(self):

self.url = 'http://www.tan8.com/guitar-245-0-collects-1-0.html&per_page='

self.ua_header = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}

def guitaSpider(self):

for page in range(0, 14):

myUrl = self.url + str(page*20)

links = self.loadPage(myUrl)

对分页面处理

通过lxml进行匹配我们可以获得每个页面下的谱子对于的超链接

def loadPage(self, url):

req = urllib2.Request(url, headers=self.ua_header)

html = urllib2.urlopen(req).read()

selector = etree.HTML(html)

links = selector.xpath("//div[@class='p-single-content']//a/@href")

for link in links:

self.loadLinks(link)

对乐谱页面进行处理(进行资源的爬取)

我们先拿第一页第一个谱子进行说明:http://www.tan8.com/jitapu-54910.html

我们想获取的是谱子的图片以及mp3媒体文件

但是当我们点击时就会出现:


爬取弹琴吧VIP乐谱_第1张图片

咳咳  是不是真的拿不到这些资源呢


爬取弹琴吧VIP乐谱_第2张图片

仔细观察就会发现,静态资源还是可以访问的到的:http://oss.tan8.com/jtpnew/10/54910/7b0052385f250e9c55ea292abbb96c32image_1_1.png

我们通过修改后面的参数,依次可以访问其他谱子的分段,很好同样通过lxml提取,就可以获得图片url,当然mp3文件也是一样的

特殊情况

我们还是会遇到特殊情况的拿这个谱子来说:http://www.tan8.com/jitapu-12088.html

我们查看源代码是看不到图片url正确地址的,但是我们通过浏览器开发调试却能够看得到,好吧所以这个谱子,爬虫是抓取不下来的(同学们可以自己尝试一下,有解决方案可以私信我)

对页面资源进行获取:

def loadLinks(self, url):

req = urllib2.Request(url, headers=self.ua_header)

html = urllib2.urlopen(req).read()

selector = etree.HTML(html)

guita_name = selector.xpath("//div[@class='flash_0421']//h3")

path=guita_name[0].text

try:

os.makedirs(path)

except:

return

guita_images=selector.xpath("//div[@class='jiata_yuepu_img_box']//img/@src")

#part of are wrong

self.downImage(guita_images[0],path)

try:

mp3=selector.xpath("//div[@class='play-yp']/audio/@src")

#print mp3[0]

self.downMp3(mp3[0],path)

except:

pass

图片的下载:

def downImage(self,url,path):

if "1.png" not in url:

return

else:

turl = url.split('1.png')[0]

index=1

while True:

try:

nurl = turl + str(index) + '.png'

images = urllib2.urlopen(nurl).read()

file = open(path + '/' + str(index) + '.png', 'wb')

file.write(images)

file.close()

index+=1

except:

break

mp3文件下载:

def downMp3(self,url,path):

file = open(path + '/'  + 'music.mp3', 'wb')

mp3 = urllib2.urlopen(url).read()

file.write(mp3)

file.close()

最后总结一下,分析一共只获取到了212个谱子,但是理论上应该是280个,通过之前的错误,发现应该是创建谱子目录时出的问题(还没有解决)

最后分享一下谱子(仅供交流使用):百度云盘

如果这边文章给予了你帮助,就点个赞关注一下吧,以后会经常分享关于这方面的文章

代码很多地方没有优化,我自己大概用了15分钟爬取,如果用多线程会快一些对于这里的io操作,如果有更好的意见可以私信我 

你可能感兴趣的:(爬取弹琴吧VIP乐谱)