作為一個男人
在最高光的時刻
就是說出那句
之后
還不會被人打
...
雖然在現(xiàn)實(shí)生活中你無法這樣
但是在這里
就讓你體驗(yàn)一番
那種呼風(fēng)喚雨的感覺
我們之前在爬取某些網(wǎng)站的時候
使用到了一些 python 的請求庫
模擬瀏覽器的請求
我們需要抓包啥的
能不能不這樣
可不可以就寫幾行代碼
讓它自己去打開瀏覽器
自己去請求我們要爬取的網(wǎng)站
自己去模擬我們的一些搜索
等等
反正就是
老子躺著,讓它自己動
躺好
讓 selenium 滿足你的要求
怎么玩呢?
那么接下里就是
學(xué)習(xí) python 的正確姿勢
什么是 selenium ?
其實(shí)它就是一個自動化測試工具,支持各種主流的瀏覽器
直到遇到了 python
轉(zhuǎn)身一變
selenium 變成了爬蟲利器
我們先來安裝一下
pip install selenium
接著我們還要下載瀏覽器驅(qū)動
小帥b用的是 Chrome 瀏覽器
所以下載的是 Chrome 驅(qū)動
當(dāng)然你用別的瀏覽器也闊以
去相應(yīng)的地方下載就行了
Chrome: | https://sites.google.com/a/chromium.org/chromedriver/downloads |
Edge: | https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ |
Firefox: | https://github.com/mozilla/geckodriver/releases |
Safari: | https://webkit.org/blog/6900/webdriver-support-in-safari-10/ |
下載完之后
要配置一下環(huán)境變量
接著打開 pycharm
擼點(diǎn)代碼
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
input = driver.find_element_by_css_selector('#kw')
input.send_keys("蒼老師照片")
button = driver.find_element_by_css_selector('#su')
button.click()
運(yùn)行一下
可以看到
它自己打開了 Chrome 瀏覽器
訪問了百度
搜索了蒼老師的照片
這就是 selenium 的魅力
我們來看下我們剛剛寫的代碼
我們導(dǎo)入了 web 驅(qū)動模塊
from selenium import webdriver
接著我們創(chuàng)建了一個 Chrome 驅(qū)動
driver = webdriver.Chrome()
有了實(shí)例之后
相當(dāng)于我們有了 Chrome 瀏覽器了
接著使用 get 方法打開百度
driver.get("https://www.baidu.com")
打開百度之后
我們獲取到輸入框
至于怎么獲取
等等會講
獲取到輸入框之后我們就往里面寫入我們要搜索的內(nèi)容
input = driver.find_element_by_css_selector('#kw')
input.send_keys("蒼老師照片")
輸入完了之后呢
我們就獲取到搜索這個按鈕
然后點(diǎn)擊
button = driver.find_element_by_css_selector('#su')
button.click()
就這樣完成了一次自動的百度搜索
當(dāng)我們使用驅(qū)動打開了一個頁面
這時候其實(shí)沒什么鳥用
因?yàn)槲覀円獙δ切┰剡M(jìn)行操作
就像剛剛我們要獲取輸入框然后輸入一些內(nèi)容
還有獲取按鈕點(diǎn)擊什么的
selenium 提供了挺多方法給我們獲取的
當(dāng)我們要在頁面中獲取一個元素的時候
可以使用這些方法
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
想要在頁面獲取多個元素呢
就可以這樣
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
比如我們打開了一個頁面
是這樣的 HTML
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input class="login" name="continue" type="submit" value="Login" />
</form>
</body>
<html>
可以通過 id 獲取 form 表單
login_form = driver.find_element_by_id('loginForm')
通過 name 獲取相應(yīng)的輸入框
username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')
通過 xpath 獲取表單
login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("http://form[1]")
login_form = driver.find_element_by_xpath("http://form[@id='loginForm']")
通過標(biāo)簽獲取相應(yīng)的輸入框
input1 = driver.find_element_by_tag_name('input')
通過 class 獲取相應(yīng)的元素
login = driver.find_element_by_class_name('login')
用 Chrome 瀏覽器的審核元素
可以很方便獲取相應(yīng)的屬性
直接 copy 就完事了
如果你覺得
find_element_by_xxx_xxx
太長了
那么你還可以這樣
driver.find_elements(By.ID, 'xxx')
By.屬性和上面的是一樣的
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
當(dāng)然
我們玩的是爬蟲
要的就是源代碼
我們已經(jīng)知道
通過
driver = webdriver.Chrome()
可以拿到瀏覽器對象
那么要獲取源代碼還不簡單么?
獲取請求鏈接
driver.current_url
獲取 cookies
driver.get_cookies()
獲取源代碼
driver.page_source
獲取文本的值
input.text
ok
以上就是 selenium 的常用方法
想要了解更多相關(guān) selenium 的可以到官方文檔查看
https://selenium-python.readthedocs.io/
下一次
小帥b將帶你使用它來爬取網(wǎng)站
本篇完
再見
近期文章
python爬蟲08 | 你的第二個爬蟲,要過年了,爬取豆瓣最受歡迎的250部電影慢慢看
python爬蟲07 | 有了 BeautifulSoup ,媽媽再也不用擔(dān)心我的正則表達(dá)式了
python爬蟲06 | 你的第一個爬蟲,爬取當(dāng)當(dāng)網(wǎng) Top 500 本五星好評書籍
掃一掃
學(xué)習(xí) Python 沒煩惱
堅(jiān)持原創(chuàng)
給小帥b來個好看