采用selenium 抓取网易云音乐上的热门歌曲以及相关信息

由于网易云音乐网站页面采用了js技术进行了异步加载,所以这里采用了selenium并采用PHantomJS工具抓取动态页面
废话不多说,直接上代码。这个代码也是要了小生2天时间啊这是改进版的
# -*- coding: utf-8 -*-
#@Time :18-10-2 下午7:25
#@Author : LiMeng
#@Email : [email protected]
#@File : wangyiyun.py
#Software:PyCharm
import  ppretty
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import csv
if __name__ == '__main__':
    url='https://music.163.com/#/discover/toplist?id=3778678'
    csv_file = open("wangyiyunyinyue.csv", "w", newline='')
    writer = csv.writer(csv_file)
    writer.writerow((['歌曲', '歌手']))
    html=requests.get(url=url).content.decode('utf-8')
    soup=BeautifulSoup(html,'lxml')
    #由于网易云网站上是采用js异步加载网页的,所以这里采用selenium的driver模块进行加载
    driver=webdriver.PhantomJS()
    driver.get(url=url)
    driver.switch_to.frame("contentFrame")
    tr_list=driver.find_element_by_css_selector("tbody").find_elements_by_tag_name('tr')
    for tr in tr_list:
        tt_txt=tr.find_element_by_css_selector('b')
        geshou_txt=tr.find_elements_by_tag_name('td')[3].find_element_by_css_selector('span').get_property('title')
        writer.writerow([tt_txt.get_property('title'),geshou_txt])
    writer.writerow('\n')
    writer.writerow(['用户', '评论'])
   #这里有一个诀窍,本来我是采用find_element_by_class_name函数调用的,但是class的属性值为cmmts j-flag,这里一直报      错,所以就采用find_element_by_css_selector这个函数了
for page in range(5):
#爬取5页的评论
    div_list=driver.find_element_by_css_selector('.cmmts.j-flag').find_elements_by_class_name('itm')
    for div_x in div_list:
        pinglun=(div_x.find_element_by_class_name('cntwrap').find_elements_by_tag_name('div'[0]).find_element_by_css_selector('.cnt.f-brk').text
   #获取评论区所有的文字,包括用户名和评论,然后采用split函数将用户名和评论进行分开。这里有一个坑,我一直采用的是split(":")调用,但是没成想到这里的冒号是中文的冒号,所以一开始硬是没有将两个元素分开
    writer.writerow([str(pinglun).split(":")[0],str(pinglun).split(":")[1]])
    driver.find_element_by_link_text(u'下一页').click()
csv_file.close()
这是运行结果的界面,可以看到,excel表里面存储了网易云的热门歌曲

采用selenium 抓取网易云音乐上的热门歌曲以及相关信息_第1张图片

这是抓取的评论界面

采用selenium 抓取网易云音乐上的热门歌曲以及相关信息_第2张图片

你可能感兴趣的:(Python)