python—爬取某魚直播
- 2019 年 10 月 8 日
- 筆記
用了selenium,才深刻的體會到它的好處,更加的方便更加的快捷,更容易的獲取網頁的資訊。
這裡用selenium爬取某魚直播下面的前五頁的直播間資訊,例如直播房間名,主播名,直播熱度,以及直播的類別。即圖片紅色下橫線的東西。首先進入鬥魚的頁面,選擇直播,接著複製url備用,然後就按F12去分析


做爬蟲的步驟還是那樣,先去原網頁的地址找到數據的位置,接著提取出需要的數據,在整理起來,保存起來。
這裡我獲取的只有前5頁的直播間資訊。當然可以獲取更多的內容。做爬蟲只是為了方便統計以及數據的可視化,便於學習和觀察,並不能做什麼非法操作。主要目的都是為了學習。
用selenium爬取網頁的坑就只有一兩個:
第一:獲取url後,需要等待個幾秒,讓網頁充分緩衝之後才去提取網頁的數據,這樣才能提取到數據,否則就是一個框架,並不能得到有用的消息。
第二,如果要實現換頁功能的話,需要將解析網頁的語句也放入循環,不然也會報錯
第三,就是用selenium的時候一定要匹配好單引號和雙引號,在python的習慣下,字元串就一般使用單引號去用,而網頁的數據是雙引號的話也提取不到數據。
第四,換頁操作的時候,選擇正確的class名字至關重要

如果用瀏覽器的f12的選擇的功能,他會定位到這裡黑色下劃線的地方,但是要實現換行要選擇紅色下劃線的class名,才能實現。
關於用selenium去爬取的東西也沒其他的了,詳細的操作可以去這裡看
下面貼一下程式碼,程式碼僅供參考,如若有錯,歡迎指出:
from selenium import webdriver import time path = '這裡是你的selenium的驅動的地址' url = 'https://www.douyu.com/directory/all' browser = webdriver.Chrome(executable_path=path) browser.maximize_window() browser.get(url) time.sleep(10) allzhibo = [] nnum = 0 page = 0 while page<1: li_list = browser.find_elements_by_xpath('//ul[@class="layout-Cover-list"]/li') num = 0 for i in li_list: zhibo = {} if num >=10: zhibo['數目'] = nnum num+=1 nnum+=1 zhibo['直播房間名'] = i.find_element_by_class_name("DyListCover-intro").text zhibo['主播'] = i.find_element_by_class_name("DyListCover-user").text zhibo['直播熱度'] = i.find_element_by_class_name("DyListCover-hot").text zhibo['分類'] = i.find_element_by_class_name("DyListCover-zone").text allzhibo.append(zhibo) else: num+=1 nextpage = browser.find_element_by_class_name("dy-Pagination-next") nextpage.click() page+=1 time.sleep(10) #這裡實現的是將數據保存到文本里去 with open('某魚直播.txt','w',encoding='utf-8') as f: for i in allzhibo: for j in i.keys(): print(j+':'+str(i[j])+' ') f.write(j+':'+str(i[j])+' ') f.write('n') browser.close()
最後得到結果就是這樣的:

然後可以對這些數據進行分類排序,就可以得到一些熱度最高的直播間,或者是什麼分類的直播間有那些的操作。