Python简易爬虫——爬取某马拉雅音频
本帖最后由 frank10010 于 2019-1-4 15:09 编辑闲来没事,爬点东西玩,简单爬虫,大佬们勿笑。。。
友情提示:用此代码前要先解决此爬虫的依赖包,使用前先下载requests,bs4,lxml包。方法是:
pip3 install requests
pip3 install bs4
pip3 install lxml
废话不多说,直接上代码。。。
如有其它疑问,看到后会回复。。。
暂不能爬取付费音频。。。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
爬取X马拉雅音频
"""
import requests
import os
from bs4 import BeautifulSoup
from multiprocessing import Pool
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"}
def get_audio_list(page_num):
"""
获取当前页面音频的ID号以便下面操作
"""
url = 'https://www.ximalaya.com/youshengshu/4256765/p%s/'
id_list = []
for num in range(1, page_num+1):
text = requests.get(url=url % num, headers=headers).text
bs = BeautifulSoup(text, 'lxml')
href_tag_list = bs.find('div', attrs={'class': 'sound-list rC5T'}).find_all('a')
id_list += for i in href_tag_list]
return
def get_audio(url, file_name):
"""
下载音频文件
"""
bin_content = requests.get(url).content
audio_file = os.path.join('audio', file_name)
with open(audio_file, 'wb') as f:
f.write(bin_content)
def get_source(source_url):
"""
获取某音频ID的json信息并下载
"""
json_dict = requests.get(source_url).json()
audio_url = json_dict.get('play_path')
audio_title = json_dict.get('title')
audio_name = f'{audio_title}.mp3'
get_audio(audio_url, audio_name)
if __name__ == '__main__':
os.mkdir('audio')
pool = Pool(4)
for page_num in range(1, 18):
audio_list = get_audio_list(page_num)
for file_id in audio_list:
json_url = f'http://m.ximalaya.com/tracks/{file_id}.json'
obj = pool.apply_async(func=get_source, args=(json_url,))
pool.close()
pool.join()
print('资源下载完成')
ccraker 发表于 2019-1-16 11:28
return
这里的i是list,用!=''这种方式来比较是否为空好像不太合适
:lol i是字符串,你试试 return
这里的i是list,用!=''这种方式来比较是否为空好像不太合适 楼主给力,学习一下。 最近在学python,正好来学习下 进来学习 最近在学python,正好来学习下....... 支持一下。学习学习 如果能爬去付费音频就好了,支持! 学习学习。。。 感谢分享,学习学习