Python帶你爬取b站上的NBA形象大使,這不得大展身手...

来源:https://www.cnblogs.com/123456feng/archive/2022/04/21/16170456.html
-Advertisement-
Play Games

前言 今天給大家透露了我們這篇要說的牛逼利器 selenium + phantomjs Python學習交流Q群:906715085### 如果你知道 selenium 是什麼了 它能做到自動操作 比如我們上次說的自動百度蒼老師 將帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們 但有時候 我們不想 ...


前言

今天給大家透露了我們這篇要說的牛逼利器

selenium + phantomjs

Python學習交流Q群:906715085###
如果你知道 selenium 是什麼了

它能做到自動操作

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

 

在這裡插入圖片描述

將帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們

但有時候

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

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

也就是說

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


phantomJS 就是

它是一個基於 WebKit 的瀏覽器引擎

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

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

所以對於市面上大多通過 js 渲染的動態網站

難以解析的網站

想要爬取的話

就會使用到

selenium + phantomjs

那麼怎麼玩呢

這次

就帶領你

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

接下來就是

學習 python 的正確姿勢

在這裡插入圖片描述

這次,將帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們

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

那麼 在這裡給你介紹幾點

你將會體會到人家有多麼牛逼
在這裡插入圖片描述

首先比吳京帥

這次,將帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們

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

在這裡插入圖片描述
在這裡插入圖片描述

唱得了歌

還跳得了舞

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

除此之外

還有諸多優點

在這裡就不說了

相信你已經和我一樣

已經被他的優秀所折服了

正因為如此優秀

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

那麼話不多說

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

python爬蟲11 | 這次,將帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們

首先來分析一下 b 站

打開

https://www.bilibili.com/

 

可以看到有一個搜索按鈕

我們就輸入「蔡徐坤 籃球」
在這裡插入圖片描述

按一下搜索

跳出來另一個視窗

在這裡插入圖片描述

在這裡插入圖片描述

在這個頁面可以看到

我們需要的數據有

名稱

視頻地址

描述

觀看次數

彈幕數量

發佈時間

待會我們就把這些數據都爬下來

分析完之後

就開始擼代碼了

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

browser = webdriver.Chrome()

 

接著開始訪問 b 站

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

 

獲取到b站首頁的輸入框和搜索按鈕

Python學習交流Q群:906715085###
 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站彈出了一個登錄框

正好擋住了我們要操作的搜索
在這裡插入圖片描述

那麼就在搜索之前

點擊一下首頁刷新一下再輸入吧

 # 被那個破登錄遮住了
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_handles
browser.switch_to.window(all_h[1])
get_source()

 

我們還要獲取總頁數

因為每一頁的內容

我們都是要抓取的

在這裡插入圖片描述

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_source
soup = BeautifulSoup(html,'lxml')
save_to_excel(soup)

 

解析爬取

Python學習交流Q群:906715085###
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').text
        item_view = item.find(class_='so-icon watch-num').text
        item_biubiu = item.find(class_='so-icon hide').text
        item_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()

 

來運行一下項目吧

在這裡插入圖片描述

數據到手
在這裡插入圖片描述

哦~ 對了

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

簡單簡單

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

首先我們要下載phantomjs

你可以到

http://phantomjs.org/download.html

 

這裡去下載

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

在這裡插入圖片描述

接著回到我們的代碼

將 Chrome 換成 phantomjs

browser = webdriver.PhantomJS()

 

這次我們再來運行項目

在這裡插入圖片描述

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

看下我們抓到的數據
在這裡插入圖片描述

結束:

我們就把蔡徐坤給爬取下來了,今天的教程還是比較簡單的,每一個操作步驟都給大家交代的明明白白,相信大家一定可以學會

的。當然,沒有學會的小伙伴也不要害羞,要及時說出哪裡不懂,評論留言就給你回覆。最後,記得給我點贊鴨!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開頭 看電影還在花錢?啥年代了?居然還有看電影花錢的,今天就給你上一課,讓你看看看電影是不需要花錢的。說乾就乾,衝衝 沖,代碼與實現思路就放在下麵了。 實現目的與思路 目的: 實現對騰訊視頻目標url的解析與下載,由於第三方vip解析,只提供線上觀看,隱藏想實現對目標視頻的下載 思路: 首先拿到想要 ...
  • return語句用於退出函數,向調用方返回一個表達式。 return在不帶參數的情況下(或者沒有寫return語句),預設返回None。 None是一個特殊的值,它的數據類型是NoneType。NoneType是Python的特殊類型,它只有一個取值None。 它不支持任何運算也沒有任何內建方法,和 ...
  • DFA 演算法是通過提前構造出一個 樹狀查找結構,之後根據輸入在該樹狀結構中就可以進行非常高效的查找。 設我們有一個敏感詞庫,詞酷中的辭彙為:我愛你我愛他我愛她我愛你呀我愛他呀我愛她呀我愛她啊 那麼就可以構造出這樣的樹狀結構: 設玩家輸入的字元串為:白菊我愛你呀哈哈哈 我們遍歷玩家輸入的字元串 str ...
  • 前言 又到每日分享Python小技巧的時候了,今天給大家分享啥呢?大家要不要猜一猜,今天給大家分享矢量影像批量裁剪以及合併。 聽起來有點不懂,看完你就懂了,擴展知識。 矢量批量裁剪的代碼 在:chp10\python\矢量批量裁剪.tbx\矢量批量裁剪,可以直接運行,右鍵編輯查看代碼 代碼如下: P ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 由於微服務架構中每個服務可能分散在不同的伺服器上,因此需要一套分散式日誌的解決方案。spring-cloud提供了一個用來trace服務的組件sleuth。它可以通過日誌獲得服務的依賴關係。基於sleuth,可以通過現有的日誌工具實現分散式日誌的採集。 這裡使用的是ELK,也就是elasticsea ...
  • 一提到Spring,大家最先想到的是啥?是AOP和IOC的兩大特性?是Spring中Bean的初始化流程?還是基於Spring的Spring Cloud全家桶呢? 今天我們就從Spring的IOC特性入手,聊一聊Spring中把Bean註入Spring容器的幾種方式。 我們先來簡單瞭解下IOC的概念 ...
  • JVM(Java虛擬機) 學習String類前,先瞭解一下JVM,也稱為Java虛擬機。 JVM記憶體分有幾大區域,其中,常見有堆、桟、方法區、常量池。 堆是運行時數據區,類通過new指令創建的對象會在堆記憶體里分配空間。堆記憶體的數據是由java垃圾回收器自動回收。堆的優勢是可以動態地分配記憶體大小。缺點 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...