我想大家都聽過音樂《驚雷》吧,這是最近很火的一首歌,聽說拿下了60億的流量。楊坤在直播中懟《驚雷》,所以我就想看看網絡上是怎麼樣評論這首歌的。開始今天的爬蟲之旅吧!!
一
第一步,我們先分析網頁。網頁的地址為:
https://music.163.com/#/song?id=1431580747
首先還是需要打開開發者工具,找到API接口。
API的接口位置
數據信息
一般來說,接口的信息都是在XHR這個類目中。所以當你爬多了,自然就有經驗了。但是這裡出現了一個問題:這個接口是需要傳遞兩個參數的,但是這兩個參數都被加密了,這就很麻煩了,如下圖所示:
加密參數
那麼就需要解密了,當然我已經解密成功了,在這裡我就不說了,因為不是很難,主要用的是js的加密技巧。只要大家熟悉js,那就問題不是很大。
但是對於不會解密的小夥伴來說,這怎麼辦呢?
沒事,下面我們就使用selenium來完成。
二
在上一步,我們基本上把 網站分析完畢,現在要做的就是發起請求,獲取響應了。今天使用的是selenium。selenium是自動化測試的一個工具,模擬人的行為。
首先,需要安裝selenium庫,並下載驅動。
安裝:pip install selenium
驅動下載地址:
https://chromedriver.chromium.org/downloads
即可獲取驅動,下載你對應的版本
谷歌瀏覽器驅動
你可以根據自己瀏覽器的版本,下載對應的驅動。我在這裡使用的是谷歌瀏覽器的驅動。那麼如何查看瀏覽器的版本號呢?如下圖所示:
點擊設置,按圖所示點擊
將下載好的谷歌驅動,放至Python的目錄下,即可。
驅動所在的位置
至此,selenium環境配置成功。
三
現在就開始來寫代碼了,首先要將驅動導入進來
<code>from selenium import webdriver/<code>
接下來創建一個類:初始化url和驅動對象
<code>class WangYiYun(object): def __init__(self, url): self.url = url self.driver = webdriver.Chrome()/<code>
四
接下來要做的就是獲取數據了,在這一步,我創建了一個getConten這個方法
<code>def getContent(self): self.driver.get(self.url) js = 'window.scrollBy(0,8000)' # self.driver.execute_async_script(js) self.driver.switch_to.frame(0) self.driver.execute_script(js) for page in range(413): selectors = self.driver.find_elements_by_xpath('//div[@class="cmmts j-flag"]/div') # print(selectors.find_element_by_xpath('')) for selector in selectors: text = selector.find_element_by_xpath('.//div[@class="cnt f-brk"]').text list_text = text.split(':') text = list_text[1] WangYiYun.save_text(text) next_page = self.driver.find_element_by_partial_link_text('下一頁') next_page.click() time.sleep(5)/<code>
在這一步,要做的是訪問url地址,通過js代碼將滾動條下拉,因為網易雲音樂是屬於一個網頁嵌套另外一個網頁,所以這裡要做的就是獲取到第一個iframe。如下圖所示:
iframe位置
接下來就是下拉之後通過xpath提取到每一個評論和下一頁的按鈕,並點擊和保存數據。
五
接下來要做的就是保存數據了,這個比較簡單,我就不做過多的敘述了,直接上代碼
<code>def save_text(item): with open('content.txt', 'a', encoding='utf-8') as f: f.write(str(item) + '\\n')/<code>
六
數據保存完畢之後,那麼肯定要做一個可視化操作吧,假如你在公司工作,那麼老闆喜歡看到的不是這些密密麻麻的文字評論,而是要看報表對吧,那我就做一個詞雲方便大家觀看。
這裡使用了中文分詞庫jieba和詞雲庫wordcloud
<code>import wordcloudimport jiebaf = open('content.txt', encoding='utf-8')txt = f.read()txt_list = jieba.lcut(txt) # 分詞# print(txt_list)string = ''.join(txt_list)# print(string)w = wordcloud.WordCloud(width=1000, height=1000, background_color='white', font_path='msyh.ttc', scale=15, stopwords={' '})w.generate(string)w.to_file('content1.png')/<code>
詞雲效果
—— E N D ——
好了,到這裡又要跟大家說再見的時候了。希望我的文章能帶給您知識,帶給您幫助!同時也謝謝您能抽出寶貴的時間閱讀,創作不易,如果您喜歡的話,點個關注再走吧。您的支持是我創作的動力,希望今後能帶給大家更多優質的文章。
閱讀更多 地表嘴強程序員 的文章