Python学习:使用selenium爬取某个网站时出现的问题

  • Post author:
  • Post category:python


最近,学习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('&nbsp','').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()



版权声明:本文为weixin_47468969原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。