最近,学习Python爬虫兴奋之时,突发奇想想去爬取网易云音乐的评论,根据所学,先找到评论定位的CSS选择器,然后什么也没有输出,又仔细检查了一下没有任何问题,后来一遍一遍查询资料发现,原来网页中有frame或者iframe时,需要在定位器的前面加这么一句:
web.switch_to.frame(frame标志) # frame标志可以是name,id,class的值
这样再接着往下写就可以满足了,代码如下:
import time
from selenium.webdriver import Chrome
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
web=Chrome()
web.get("https://music.163.com/#/song?id=1997437579")
time.sleep(1)
#这行非常重要,相当于在frame内部重新又嵌套了一个新的html文件,所以要用这行去转换到新的html文件内
web.switch_to.frame('g_iframe')
#到音乐列表
#music_list=web.find_elements(By.CSS_SELECTOR,'tbody tr b') #采用css选择器来定位的
music_list=web.find_elements(By.CSS_SELECTOR,'.n-cmt .cmmts .cntwrap .cnt')
f=open('网易云评论.txt','w',encoding='utf-8')
for music in music_list:
abs=music.get_attribute('innerHTML').replace(' ','').replace(' ','').replace('r&b','').split('>:')[-1].split('>;')[-1].split('">')[-1].strip()
f.write(abs)
f.write('\n')
# b=music.find_element(By.XPATH,'./td[2]/div/div/div/span/a/b')
# b.find_element(By.XPATH,'//*[@id="19974375791671691746446"]/td[2]/div/div/div/span/a/b/div')
# print(b.text)
f.close()