首頁>技術>

本文連結:https://blog.csdn.net/m0_48645250/article/details/111605237

搜資料發現,這是因為使用了動態網頁技術。實驗使用網址:很好聽的歌

實驗技術:

python + selenium + driver

如圖:

2. 分析問題

根據書本及網上搜索,我採用python + selenium + driver 來完成此次實驗如圖:

如圖:

這裡涉及到selenium的元素定位如圖:

所以我們可以 先用 find_elements_by_class_name=”cmmts j-flag”爬取父級標籤注意:這裡是 elements程式碼:

如圖:

此時 定位改成 find_element_by_class_name=”cnt f-brk”注意:這裡不需要加s,理由同上程式碼:

for selector in selectors:#selector 可以看成是父級下的包含評論的一個個div    text = selector.find_element_by_xpath('.//div[@class="cnt f-brk"]').text#其中一個div的text(也就是評論)

執行結果如圖:

所以我們想要是程式自動可以實現跳轉下一頁,再用原先的程式碼進行爬取,就可以解決了。

發現 這裡的class 引數是很長的,一開始我沒多想 直接用了,當然報錯了。搜尋後發現這裡用了 其他技術,使class的引數一直會改變

對比發現,class引數後的一串數字不一樣,可是數字前的引數是一樣的。再加上自動選擇需要爬取的頁數。程式碼:

    next_button = driver.find_element_by_xpath('//a[starts-with(@class,"zbtn znxt js-n-")]')#"下一頁"按鈕的class引數    driver.execute_script('arguments[0].click();', next_button)#這句同樣來自網路,本人沒有看懂,我想打.click(),可是報錯了

爬取結果如圖:

儲存爬取資訊,程式碼:

     with open('網易雲音樂.txt', 'a', encoding='utf-8') as f:        f.write(text + '\n')

完整程式碼

from selenium import webdriver #匯入模組import timedriver  = webdriver.Chrome() #控制chrome瀏覽器driver.get('https://music.163.com/#/program?id=2061331064 ')#待爬取的音樂連結(這裡是網易雲音樂網頁版)driver.switch_to.frame('g_iframe')#不知道這一步for page in range(2):#待爬取的頁數,這裡是2頁    selectors = driver.find_elements_by_xpath('//div[@class="cmmts j-flag"]/div')  # 第一頁中評論所在的父級標籤    for selector in selectors:#selector 可以看成是父級下的包含評論的一個個div        text = selector.find_element_by_xpath('.//div[@class="cnt f-brk"]').text#其中一個div的text(也就是評論)        print(text)#列印這些評論        with open('網易雲音樂.txt', 'a', encoding='utf-8') as f:            f.write(text + '\n')    next_button = driver.find_element_by_xpath('//a[starts-with(@class,"zbtn znxt js-n-")]')#下一頁的按鈕    driver.execute_script('arguments[0].click();', next_button)#點選下一頁    time.sleep(2)#等待2秒driver.quit()#關閉diver
結論與收穫結論:

動態網站在很多地方都涉及到,相對於靜態網站動態網站,爬取資料需要解析,需要定位元素標籤,安全性強。

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 用Python編寫一個小迷宮來玩一玩