本次例子是如何用Selenium來自動獲取網易雲某首歌的評論
例如許飛的父親寫的散文詩
:https://music.163.com/#/song?id=417250673。
1、準備工作
首先需要下載chromedrive,並需要在代碼裏指定路徑,chromedrive版本號需要對應。
from selenium import webdriver
driver = webdriver.Chrome(executable_path='chromedriver.exe') # Chrome瀏覽器
driver.get("https://www.baidu.cn")
2、爬取流程
selenium是模擬人操作電腦的過程,類似遊戲自動點擊的腳本。流程十分簡單:
- 模擬網站登陸到改頁面(這個例子不需要賬號密碼登陸,因此十分簡答)
- 用各種手段 如
XPath
來獲取需要的內容 - 保存數據
3、完整代碼
# -*- coding=utf-8 -*-
from selenium import webdriver
import time
class YunSpider(object):
#初始化
def __init__(self,url):
self.url = url
self.driver = webdriver.Chrome(executable_path='chromedriver.exe')
#打開網站,實例方法
def getContent(self):
self.driver.get(self.url)
#進入內嵌網頁
self.driver.switch_to.frame(0) #0代表是第一個框
js = 'window.scrollBy(0,8000)'
self.driver.execute_script(js)
#翻頁
for page in range(2):
# //任意節點 .//從上個節點開始 /下面一個節點
selectors = self.driver.find_elements_by_xpath('//div[@class="cmmts j-flag"]/div')
for selector in selectors:
text = selector.find_element_by_xpath('.//div[@class="cnt f-brk"]').text
# print(text)
# self.saveData(text)
YunSpider.saveData(text)
#找到下一頁的元素點擊
# find_element_by_partial_link_text 獲取文本鏈接,模糊匹配
nextPage = self.driver.find_element_by_partial_link_text('下一頁')
# 點擊下一頁
nextPage.click()
time.sleep(0.5)
@staticmethod
def saveData(item):
with open('yun.txt','a',encoding='utf-8') as f:
f.write(item + '\n')
f.write('*'*20 + '\n')
if __name__ == '__main__':
url = 'https://music.163.com/#/song?id=417250673'
yunspder = YunSpider(url)
yunspder.getContent()
最後顯示爬出的結果:
總結: 該例子很簡單,複雜的內容爬取還需多學習。