zoukankan      html  css  js  c++  java
  • 【python爬虫】 爬云音乐我和xxx共同听过的歌曲

    闲聊的时候,觉得,想写个爬虫,爬下2个人共同听过的歌曲有哪些,然后一鼓作气,花了一个多小时,写了一个。支持最近一周和所有时间,需要用户没有关闭听歌排行显示

    How to start

    使用到的工具是Selenium一个web自动化测试工具,提供IDE以及插件多种方式。python下安装

    pip install selenium

    chromedriver.exe 下载对应Chrome版本的driver.exe,仓库带了一份Chrome version 78的driver.exe

    代码不多,60行,我就直接贴代码了。

    python main.py

    
    # -*- coding:utf-8 -*-
    from enum import Enum
    from time import sleep
    
    from selenium import webdriver
    import selenium.webdriver.support.ui as ui
    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    
    def get_song_rank_list(url, songs_time):
    	print("
    -------------Start---------------")
    	driver = webdriver.Chrome(
    		executable_path='./drv/chromedriver')
    	# https://sites.google.com/a/chromium.org/chromedriver/downloads chrome对应版本driver
    
    	driver.get(url)
    	driver.switch_to.frame('g_iframe')
    	wait = ui.WebDriverWait(driver, 15)
    	data = ""
    	song_dict = {}
    
    	if wait.until(lambda driver: driver.find_element_by_class_name('g-bd')):
    		if songs_time == 1:
    			driver.find_element_by_id('rHeader').find_element_by_id('songsall').click()
    			sleep(3)
    
    		data += driver.find_element_by_id('rHeader').find_element_by_tag_name('h4').text
    		print(data)
    		lists = driver.find_element_by_class_name('m-record').find_elements_by_tag_name('li')
    		print("Top{}:".format(len(lists)))
    		for l in lists:
    			name = (l.find_element_by_tag_name('b').text).decode("utf-8")
    			singer = (l.find_element_by_class_name('s-fc8').text.replace('-', '')).decode("utf-8")
    			times = l.find_element_by_class_name('bg').get_attribute('style')
    			song = "{}, {}, {}".format(name, singer, times)
    			print(song)
    			song_dict[name] = song
    	return song_dict
    
    
    def compare_song(dict1, dict2):
    	print("
    --------------------------------")
    	print("
    ---->Same song between us")
    	for name, song in dict1.iteritems():
    		if name in dict2:
    			print(song)
    	print("---->End")
    	print("
    --------------------------------")
    
    SONGS_WEEK = 0
    SONGS_ALL = 1
    if __name__ == '__main__':
    	girl = get_song_rank_list("https://music.163.com/#/user/songs/rank?id=288007045", SONGS_ALL)
    	boy = get_song_rank_list("https://music.163.com/#/user/songs/rank?id=39661960", SONGS_ALL) 
    	compare_song(girl, boy)
    
    
    

    Console

    pic
    pic
  • 相关阅读:
    js动态添加CSS
    LINUX命令行回滚SVN版本
    LINUX文件名批量修改
    LINUX下文件编码转换 iconv
    ubuntu下eclipse的svn插件使用javahl
    HTML5学习笔记 本地数据库
    正则表达式
    我的第一篇博客
    【分布式锁的演化】分布式锁居然还能用MySQL?
    【分布式锁的演化】终章!手撸ZK分布式锁!
  • 原文地址:https://www.cnblogs.com/SeekHit/p/11953875.html
Copyright © 2011-2022 走看看