前言 今天給大家透露了我們這篇要說的牛逼利器 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()
這次我們再來運行項目
這次就是真正的不會打開任何有界面的瀏覽器了
看下我們抓到的數據
結束:
我們就把蔡徐坤給爬取下來了,今天的教程還是比較簡單的,每一個操作步驟都給大家交代的明明白白,相信大家一定可以學會
的。當然,沒有學會的小伙伴也不要害羞,要及時說出哪裡不懂,評論留言就給你回覆。最後,記得給我點贊鴨!!!