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

由于网易云音乐网站页面采用了js技术进行了异步加载,所以这里采用了selenium并采用PHantomJS工具抓取动态页面
废话不多说,直接上代码。这个代码也是要了小生2天时间啊这是改进版的
# -*- coding: utf-8 -*-
#@Time :18-10-2 下午7:25
#@Author : LiMeng
#@Email : 925762221@qq.com
#@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表里面存储了网易云的热门歌曲

这是抓取的评论界面

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值