frank10010 发表于 2019-1-2 20:22

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('资源下载完成')





frank10010 发表于 2019-1-16 17:41

ccraker 发表于 2019-1-16 11:28
return
这里的i是list,用!=''这种方式来比较是否为空好像不太合适

:lol i是字符串,你试试

ccraker 发表于 2019-1-16 11:28

return
这里的i是list,用!=''这种方式来比较是否为空好像不太合适

yike911 发表于 2019-1-2 20:37

Norton 发表于 2019-1-2 20:43

楼主给力,学习一下。

仓鼠666 发表于 2019-1-2 21:24

最近在学python,正好来学习下

浮尘云烟 发表于 2019-1-2 21:28

进来学习

唯一笑解千愁 发表于 2019-1-2 21:33

最近在学python,正好来学习下.......

galaxyone 发表于 2019-1-2 21:39

支持一下。学习学习

Pers丶零 发表于 2019-1-2 21:40

如果能爬去付费音频就好了,支持!

yxh5120 发表于 2019-1-2 21:45

学习学习。。。

leowhoo 发表于 2019-1-2 22:48

感谢分享,学习学习
页: [1] 2 3
查看完整版本: Python简易爬虫——爬取某马拉雅音频