本文連結: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
結論與收穫結論:動態網站在很多地方都涉及到,相對於靜態網站動態網站,爬取資料需要解析,需要定位元素標籤,安全性強。
最新評論