天天看點

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

在上一篇中

小帥b給大家透露了我們這篇要說的牛逼利器

selenium + phantomjs

如果你看了

那麼你應該知道 selenium 是什麼了

它能做到自動操作

比如我們上次說的自動百度蒼老師

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

但有時候

我們不想要讓它打開浏覽器去執行

能不能直接在代碼裡面運作呢

也就是說

有沒有一個無形的浏覽器呢

phantomJS 就是

它是一個基于 WebKit 的浏覽器引擎

可以做到無聲無息的操作各種動态網站

比如 js,css選擇器,dom操作的

是以對于市面上大多通過 js 渲染的動态網站

難以解析的網站

想要爬取的話

就會使用到

selenium + phantomjs

那麼怎麼玩呢

這次

小帥b就帶領你

使用它們來爬取b站上的 蔡徐坤和他的球友們

接下來就是

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

如果你還不知道蔡徐坤是誰

那麼 小帥b 在這裡給你介紹幾點

你将會體會到人家有多麼牛逼

首先比吳京帥

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

其次是他的微網誌動不動就被轉發上億次,還被央視點名表揚

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...
python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

唱得了歌

還跳得了舞

打得了籃球,當過 NBA 形象大使

除此之外

還有諸多優點

在這裡就不說了

相信你已經和我一樣

已經被他的優秀所折服了

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

(蔡徐坤本蔡)

正因為如此優秀

是以 b 站上很多 up 主向他學習打籃球

那麼話不多說

開始爬取b站上的蔡徐坤和他的球友們

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

首先來分析一下 b 站

打開

https://www.bilibili.com/

可以看到有一個搜尋按鈕

我們就輸入「蔡徐坤 籃球」

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

按一下搜尋

跳出來另一個視窗

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

在這個頁面可以看到

我們需要的資料有

名稱

視訊位址

描述

觀看次數

彈幕數量

釋出時間

待會我們就把這些資料都爬下來

分析完之後

就開始撸代碼了

首先我們要拿到浏覽器的對象

browser = webdriver.Chrome()

接着開始通路 b 站

browser.get("https://www.bilibili.com/")

擷取到b站首頁的輸入框和搜尋按鈕

input = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#banner_link > div > div > form > input")))submit = WAIT.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="banner_link"]/div/div/form/button')))

在這裡的

WAIT.until(EC.presence_of_element_located...

就是等到這個元素可操作的時候才會繼續執行下一步

擷取到輸入框元素後輸入「蔡徐坤 籃球」

接着點選搜尋

input.send_keys('蔡徐坤 籃球')submit.click()

然而

不妙的事情發生了

b站彈出了一個登入框

正好擋住了我們要操作的搜尋

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...
python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

那麼就在搜尋之前

點選一下首頁重新整理一下再輸入吧

# 被那個破登入遮住了index = WAIT.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#primary_menu > ul > li.home > a")))index.click()

這樣登入框就不會出來了

(當然,你在這裡也可以使用模拟登入,但這個,小帥b往後說)

ok..

浏覽器自動點選搜尋之後

這個時候會彈出一個新的視窗

這個視窗裡的内容

就是我們要的搜尋結果

是以我們要讓我們目前的浏覽器對象擷取到目前的視窗

接着擷取到第一頁的所有資料

# 跳轉到新的視窗print('跳轉到新視窗')all_h = browser.window_handlesbrowser.switch_to.window(all_h[1])get_source()

我們還要擷取總頁數

因為每一頁的内容

我們都是要抓取的

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

total = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.last > button")))return int(total.text)

擷取到總頁數之後

我們就開始循環

for i in range(2,int(total+1)):next_page(i)

如何擷取下一頁呢

當然是模拟點選「下一頁按鈕」的操作

我們擷取「下一頁按鈕」的元素

然後點選

點選之後判斷一下是否在我們目前的頁數

然後擷取資料

print('擷取下一頁資料')next_btn = WAIT.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.next > button')))next_btn.click()WAIT.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.active > button'),str(page_num)))get_source()

有時候可能網速卡

在刷到某一頁的時候資料加載不出來

可以來個異常捕獲

重新整理一下

再遞歸一下嘿嘿

except TimeoutException:browser.refresh()return next_page(page_num)

擷取資源很簡單

我們已經用 selenium 跳轉到我們要的頁面了

那麼就拿下目前頁面的源碼

然後用

來解析一下

最後把資料放到 excel 中

WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#server-search-app > div.contain > div.body-contain > div > div.result-wrap.clearfix')))html = browser.page_sourcesoup = BeautifulSoup(html,'lxml')save_to_excel(soup)

解析爬取

def save_to_excel(soup):list = soup.find(class_='all-contain').find_all(class_='info')

for item in list:item_title = item.find('a').get('title')item_link = item.find('a').get('href')item_dec = item.find(class_='des hide').textitem_view = item.find(class_='so-icon watch-num').textitem_biubiu = item.find(class_='so-icon hide').textitem_date = item.find(class_='so-icon time').text

print('爬取:' + item_title)

global n

sheet.write(n, 0, item_title)sheet.write(n, 1, item_link)sheet.write(n, 2, item_dec)sheet.write(n, 3, item_view)sheet.write(n, 4, item_biubiu)sheet.write(n, 5, item_date)

n = n + 1

最後别忘了關閉浏覽器哦

finally:browser.close()

來運作一下項目吧

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

資料到手

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

哦~ 對了

不是說還有一個叫做 phantomjs 的麼?

簡單簡單

接下來我們就利用它來打造一個無痕的浏覽器

首先我們要下載下傳phantomjs

你可以到

http://phantomjs.org/download.html

這裡去下載下傳

下載下傳完之後你需要配置一下環境變量哦

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

接着回到我們的代碼

将 Chrome 換成 phantomjs

browser = webdriver.PhantomJS()

這次我們再來運作項目

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

這次就是真正的不會打開任何有界面的浏覽器了

看下我們抓到的資料

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...
python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

ok~

本篇的源代碼和爬取到的資料已經放到公衆号了

在「學習python的正确姿勢」公衆号發送 bb擷取

本篇完

近期文章

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...

掃一掃

學習 Python 沒煩惱

python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...
python爬蟲爬取b站_python爬蟲11 | 這次,将帶你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友們-Go語言中文社群...