珍珠奶茶丶板牙 发表于 2018-7-22 19:49

【Python开源】抖音热门BGM爬虫下载~~~~

本帖最后由 珍珠奶茶丶板牙 于 2018-7-22 19:53 编辑

下午无聊在某网上刷了会儿抖音,发现有些音乐还是挺好听的,可以用来做手机铃声,于是想办法从某网上把歌曲爬下来
代码仅供学习,可能代码中涉及到网站链接,请管理宽恕

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time    : 2018/7/22 18:04
# Author: Bnightning
# Site    : https://www.bnightning.cn
# File    : douyin.py
# Software: PyCharm
# Python Version : 3.6

import requests
from bs4 import BeautifulSoup
import time


def download_file(src, file_path):
    r = requests.get(src, stream=True)
    f = open(file_path, "wb")
    for chunk in r.iter_content(chunk_size=512):
      if chunk:
            f.write(chunk)
    return file_path


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

save_path = "H:\\Music\\douyin\\"
url = "https://kuaiyinshi.com/hot/music/?source=dou-yin&page=1"
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
max_page = soup.select('li.page-item > a')[-2].text
for page in range(int(max_page)):
    page_url = "https://kuaiyinshi.com/hot/music/?source=dou-yin&page={}".format(page + 1)
    page_res = requests.get(page_url, headers=headers)
    soup = BeautifulSoup(page_res.text, 'lxml')
    lis = soup.select('li.rankbox-item')
    singers = soup.select('div.meta')
    music_names = soup.select('h2.tit > a')
    for i in range(len(lis)):
      music_url = "http:" + lis.get('data-audio')
      print("歌名:" + music_names.text, singers.text, "链接:" + music_url)
      try:
            download_file(music_url,
                        save_path + music_names.text + ' - ' + singers.text.replace('/', ' ') + ".mp3")
      except:
            pass
    print("第{}页完成~~~".format(page + 1))
    time.sleep(1)

and1=1 发表于 2018-7-23 09:47

没有注释.差评(手动狗头)

菜鸟出学习 发表于 2018-7-22 20:42

我记得有个网站可以下载下来无水印的视频,就算有水印,提取一下应该可以用来吧。不过还是没有你这个方便

Zc2455 发表于 2018-7-22 20:10

不错 强大 虽然用不到 但还是支持一下!

葫芦炒鸡蛋 发表于 2018-7-22 20:25

本帖最后由 葫芦炒鸡蛋 于 2018-7-22 20:27 编辑

for page in range(int(max_page))、for i in range(len(lis))这种写法不Pythonic,
最好写成for i in lis:
如果要用索引的话写成for index, i in enumerate(lis):# index是索引

笨笨猪 发表于 2018-7-22 20:31

哈哈,最近再学Python的Scrapy框架,但是BS4这个库还真的用得少,基本用re和requests。先mark住,算一个项目练手

无天体 发表于 2018-7-22 22:26

刚开始学爬虫,谢谢楼主分享

maiyi2005 发表于 2018-7-23 10:14

感谢楼主的汤,呵呵

树哥树先生 发表于 2018-7-23 10:21

生命苦短,我用python3

珍珠奶茶丶板牙 发表于 2018-7-23 10:49

Rullec 发表于 2018-7-23 10:04
赞一下楼主。
根据我之前的经验,最好对savepath那里加一层过滤:有一些字符是win系统不允许作为文件名的 ...

谢谢,我也是新手,才学习
页: [1] 2 3 4 5 6 7 8
查看完整版本: 【Python开源】抖音热门BGM爬虫下载~~~~