python爬取网易云音乐排行榜实例代码_第1页
python爬取网易云音乐排行榜实例代码_第2页
python爬取网易云音乐排行榜实例代码_第3页
python爬取网易云音乐排行榜实例代码_第4页
python爬取网易云音乐排行榜实例代码_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第python爬取网易云音乐排行榜实例代码目录网易云音乐排行榜歌曲及评论爬取一、模拟登录二、排行榜数据爬取三、排行榜评论获取总结

网易云音乐排行榜歌曲及评论爬取

主要注意问题:selenium模拟登录、iframe标签定位、页面元素提取。

在利用selenium定位元素并取值的过程中遇到问题。比如xpath正确但无法定位,在进行翻页提取评论的过程中,利用selenium似乎不能提取不同页的数据,比如,明明定位的第三页的评论数据,而只能返回第一页的评论数据。

一、模拟登录

selenium定位元素模拟人的操作进行登录,直接上代码:

//模拟登录

importpandasaspd

fromseleniumimportwebdriver

fromselenium.webdriver.support.uiimportWebDriverWait

frommon.byimportBy

fromselenium.webdriver.supportimportexpected_conditionsasEC

fromselenium.webdriver.chrome.optionsimportOptions

fromselenium.webdriverimportActionChains

fromlxmlimportetree

importtime

fromdatetimeimportdatetime,timedelta

wyy_url='/'

driver=webdriver.Chrome()

driver.get(wyy_url)

driver.maximize_window()#全屏

time.sleep(2)

driver.find_element_by_xpath("//a[@class='links-fc3']").click()

time.sleep(2)

driver.find_element_by_xpath("//a[@]").click()#选择其他方式登录

#账号、密码登录

driver.find_element_by_xpath("//input[@type='checkbox']").click()#同意条款

time.sleep(0.5)

driver.find_element_by_xpath("//a[@]").click()

#选择手机号密码登录

driver.find_element_by_xpath("//a[@]").click()

time.sleep(1)

driver.find_element_by_id("p").send_keys('xxx')#这里输入你的id

driver.find_element_by_id("pw").send_keys('xxx')#这里输入密码

time.sleep(1)

#点击登录

driver.find_element_by_xpath("//a[@]").click()

time.sleep(1)

二、排行榜数据爬取

当时尝试直接用selenium定位标签取值,并没有返回有效结果。在后面爬取评论时,也遇到此问题。于是先获取页面内容在进行分析。

//排行榜

base_url="/#/discover/toplistid="

bang_typical={'飙升榜':19723756,'新歌榜':3779629,'原创榜':2884035,'热歌榜':3778678}

#选择榜单

bang=input('请输入榜单:')

#构造榜单对应的链接

url=base_url+str(bang_typical[bang])

print('开始分析:-%s'%(bang))

#进入榜单

driver.get(url)

time.sleep(3)

#iframe标签定位,必要的,否则无法定位其他标签

_iframe=driver.find_element_by_xpath("//iframe[@id='g_iframe']")#找到iframe标签

driver.switch_to.frame(_iframe)

time.sleep(1)

page_text=driver.execute_script("returndocument.documentElement.outerHTML")

#获取页面

html=etree.HTML(page_text)

trs=html.xpath('//tbody/tr')

rank_list=[]

title_list=[]

span_list=[]

singer_list=[]

fortrintrs:

rank=tr.xpath(".//span[@]/text()")[0]#注意xpath获取到的是列表,需提取其元素

title=tr.xpath(".//b/@title")[0]

span=tr.xpath(".//td[@]/span[@]/text()")[0]

singer=tr.xpath(".//div[@]/span/@title")[0]

rank_list.append(rank)

title_list.append(title)

span_list.append(span)

singer_list.append(singer)

#输出榜单结果

df_bang=pd.DataFrame({'排名':rank_list,'歌名':title_list,'时长':span_list,'歌手':singer_list})

三、排行榜评论获取

主要是评论日期的格式转换,评论内容的清洗

//评论

#日期清洗函数

defchange_time(time):

now=datetime.now()

day_y=datetime.strftime(now-timedelta(1),'%Y-%m-%d')#计算昨天

day=now.strftime('%Y-%m-%d')

year=now.strftime('%Y')

if'年'intime:#非今年

new_time=time.replace('年','-').replace('月','-').replace('日','')

elif'昨天'intime:

new_time=time.replace('昨天',day_y+'')

elif'前'intime:#前天

minut=int(time[:time.index('分')])

new_time=(now+timedelta(minutes=-minut)).strftime('%Y-%m-%d%H:%M')

eliflen(time)==5:#今天

new_time=day+''+time

else:#最近**月**日**:**

y='2025-'

time=time.replace('月','-').replace('日','')

new_time=y+time

returnnew_time

#评论清洗

defchange_review(r):

if':'inr:

r_=r.split(':')[1]

else:

r_=r

returnr_

#评论点赞

defchange_likes(l):

ifl!=[]:

l_=int(l.split('(')[1].split(')')[0])

else:

l_=0

returnl_

#拉动滚动条至翻页按钮处

driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

#获取页面信息

num=input('请输入需要爬取的页面总数:')#想要爬取评论的页数,

#这里的思路是先通过翻页将获取到的所有页面的所有内容存至列表,再对列表遍历。

#因为当时直接用selenium定位返回结果不对,当然你们也可以用selenium直接试试。

html_list=[]

foriinrange(int(num)):

page_text=driver.execute_script("returndocument.documentElement.outerHTML")

html=etree.HTML(page_text)#获取页面

html_list.append(html)

driver.find_elements_by_xpath("//div[contains(@class,'u')]/a")[-1].click()

time.sleep(4)

WebDriverWait(driver,300,0.1).until(EC.presence_of_element_located((By.XPATH,"//div[@]")))

print(f'第{i+1}页爬取成功')

rev_list=[]#所有评论的列表

dat_list=[]#对应日期的列表

forreview_pageinhtml_list:

raw_reviews=review_page.xpath("//div[@]//div[@]/text()")#提取页面所有评论

raw_reviews_=[iforiinraw_reviewsif":"ini]#保证长度一致

rv_date=review_page.xpath("//div[@]//div[@]/div[@]/div[@]/text()")

review_list=[change_review(r)forrinraw_reviews_]

date_list=[change_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论