這篇文章主要是闡述了selenium可視化數(shù)據(jù)抓取有效的方法實現(xiàn),文中根據(jù)舉例編碼講到的十分詳盡,對大家學習培訓還是工作具有很強的參照學習培訓使用價值,需求的小伙伴們下邊伴隨著小編就來互相學習了解一下吧。
Selenium是一個自動化技術(shù)檢測工具,運用它能夠推動電腦瀏覽器實行特殊動作,如鼠標點擊、下拉框等操作,同時也可以獲取電腦瀏覽器現(xiàn)階段獲得界面的程序代碼,保證由此可見即可獲得。對于有些JavaScript動態(tài)性3D渲染的頁面來說,此種抓取方式非常有效。接下來,就讓我們來感受一下它的強大之處吧。
webdriver的安裝
????selenium安裝
首先,我們使用selenium進行測試,所以我們得安裝selenium庫。
pip install selenium
????驅(qū)動安裝
webdriver是瀏覽器對應的驅(qū)動,我們使用的的瀏覽器有三種谷歌Chrome、微軟Microsoft Edge、還有一個火狐Firefox,但是我們經(jīng)常使用谷歌Chrome瀏覽器進行測試。現(xiàn)在我們就以Chrome瀏覽器為例下載它對應的chromedriver。
官網(wǎng):http://chromedriver.storage.googleapis.com/index.html
注意:
我們下載chromedriver驅(qū)動時,我們要查明瀏覽器的版本,要對應相應的版本號進行下載,否則會報錯。禁止Google瀏覽器更新服務,可以上網(wǎng)查教程。
????基本使用
????查找節(jié)點
Selenium可以驅(qū)動瀏覽器完成各種操作,比如填充表單、模擬點擊等。比如,我們想要完成向某個輸入框輸入文字的操作,總需要知道這個輸入框在哪里吧?而Selenium提供了一系列查找節(jié)點的方法,我們可以用這些方法來獲取想要的節(jié)點,以便下一步執(zhí)行一些動作或者提取信息。
獲取節(jié)點的方法:
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
給個示例
from selenium import webdriver browser=webdriver.Chrome() browser.get('https://www.baidu.com') input=browser.find_element_by_id('kw') input.send_keys('Python') browser.find_element_by_id('su').click() #提取頁面 print(browser.page_source.encode('utf-8')) #提取cookie print(browser.get_cookies()) #提取當前請求地址 print(browser.current_url) browser.close()
運行代碼后發(fā)現(xiàn),會自動彈出一個Chrome瀏覽器。瀏覽器首先會跳轉(zhuǎn)到百度,然后在搜索框中輸入Python,接著跳轉(zhuǎn)到搜索結(jié)果頁
注:當我們的chromedriver驅(qū)動沒有放置到Chrome瀏覽器路徑時,我們可以使用以下來申明瀏覽器對象。
browser=webdriver.Chrome(executable_path="chromedriver安裝路徑")
方法總結(jié):
brower.get(url):跳轉(zhuǎn)當前url鏈接。
browser.find_element_by_id('id屬性值'):定位到id屬性值。
send_keys('輸入關(guān)鍵字'):定位到輸入框后輸入。
find_element_by_id('id屬性值').click():定位到id屬性值后點擊。
browser.page_source.encode('utf-8'):獲取當前頁面的源碼。
browser.get_cookies():提取cookies。
browser.current_url:獲取當前頁面的url。
brower.close():關(guān)閉瀏覽器。
????執(zhí)行JavaScript
對于某些操作,Selenium API并沒有提供。比如,下拉進度條,它可以直接模擬運行JavaScript,此時使用execute_script()方法即可實現(xiàn),代碼如下:
#document.body.scrollHeight獲取頁面高度 from selenium import webdriver browser=webdriver.Chrome() browser.get('https://36kr.com/') #下拉邊框一次性下拉 browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') #慢慢的下拉 for i in range(1,9): time.sleep(random.randint(100,300)/1000) browser.execute_script('window.scrollTo(0,{})'.format(i*700))
這里就利用execute_script()方法將進度條下拉到最底部。為了模擬人為活動,我們調(diào)節(jié)了下拉的緩沖時間。
我們使用瀏覽器的控制臺輸入以下代碼也能運行。
window.scrollTo(0,document.body.scrollHeight)
切換Frame
我們知道網(wǎng)頁中有一種節(jié)點叫作iframe,也就是子Frame,相當于頁面的子頁面,它的結(jié)構(gòu)和外部網(wǎng)頁的結(jié)構(gòu)完全一致。Selenium打開頁面后,它默認是在父級Frame里面操作,而此時如果頁面中還有子Frame,它是不能獲取到子Frame里面的節(jié)點的。這時就需要使用switch_to.frame()方法來切換Frame。示例如下:
browser.get('https://www.douban.com/') login_iframe=browser.find_element_by_xpath('//div[ class="login"]/iframe') browser.switch_to.frame(login_iframe) browser.find_element_by_class_name('account-tab-account').click() browser.find_element_by_id('username').send_keys('123123123')
首先我們要定位到iframe,然后用switch_to.frame()方法來切換Frame,這時我們就可以定位到子Frame進行有關(guān)操作了。
????前進后退
平常使用瀏覽器時都有前進和后退功能,Selenium也可以完成這個操作,它使用back()方法后退,使用forward()方法前進。示例如下:
import time from selenium import webdriver browser=webdriver.Chrome() browser.get('https://www.baidu.com/') browser.get('https://www.taobao.com/') browser.get('https://www.python.org/') browser.back() time.sleep(1) browser.forward() browser.close()
這里我們連續(xù)訪問3個頁面,然后調(diào)用back()方法回到第二個頁面,接下來再調(diào)用forward()方法又可以前進到第三個頁面。
????選項卡管理
在訪問網(wǎng)頁的時候,會開啟一個個選項卡。在Selenium中,我們也可以對選項卡進行操作。示例如下:
import time from selenium import webdriver browser=webdriver.Chrome() browser.get('https://www.baidu.com') browser.execute_script('window.open()') print(browser.window_handles) browser.switch_to_window(browser.window_handles[1]) browser.get('https://www.taobao.com') time.sleep(1) browser.switch_to_window(browser.window_handles[0]) browser.get('https://python.org')
這里我們先跳轉(zhuǎn)到百度再打開一個空白選項卡打印選項卡編號,再跳轉(zhuǎn)到第二個選項卡也就是這個空白選項卡打開淘寶,休息一秒,再跳轉(zhuǎn)到第一個選項卡打開python官網(wǎng)。
????配置操作
selenium有很多配置,下面我舉幾個常見的。
options=webdriver.ChromeOptions() #無頭模式 option.add_argument("-headless") #設置代理 options.add_argument('proxy-server='+'192.168.0.28:808') #將瀏覽器最大化顯示 browser.maximize_window() #設置寬高 browser.set_window_size(480,800) #通過js新打開一個窗口 driver.execute_script('window.open("https://www.baidu.com");') browser=webdriver.Chrome(chrome_options=options) 繞過檢測 繞過檢測對于一些網(wǎng)站的自動化反爬很管用。 #設置屏蔽 options=webdriver.ChromeOptions() options.add_argument('--disable-blink-features=AutomationControlled') browsers=webdriver.Chrome(chrome_options=options) browsers.get('https://bot.sannysoft.com/') 網(wǎng)站:https://bot.sannysoft.com/
我們沒設置繞過檢測
我們設置了繞過檢測后
到此為止,小編就給大家介紹完畢了,希望可以為大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/128004.html
摘要:不過動態(tài)渲染的頁面不止這一種。再有淘寶這種頁面,它即使是獲取的數(shù)據(jù),但是其接口含有很多加密參數(shù),我們難以直接找出其規(guī)律,也很難直接分析來抓取。我們用一個實例來感受一下在這里們依然是先打開知乎頁面,然后獲取提問按鈕這個節(jié)點,再將其 上一篇文章:Python3網(wǎng)絡爬蟲實戰(zhàn)---36、分析Ajax爬取今日頭條街拍美圖下一篇文章:Python3網(wǎng)絡爬蟲實戰(zhàn)---38、動態(tài)渲染頁面抓取:Spla...
摘要:一個網(wǎng)站使用的特征就是源代碼里包含了入口比如如果你在一個網(wǎng)站上看到了,那么采集這個網(wǎng)站數(shù)據(jù)的時候要格外小心。直接點擊下拉框中的選項不一定可行。未審核初審通過復審通過審核不通過專門提供了類來處理下拉框。 JavaScript JavaScript 是網(wǎng)絡上最常用也是支持者最多的客戶端腳本語言。它可以收集 用戶的跟蹤數(shù)據(jù),不需要重載頁面直接提交表單,在頁面嵌入多媒體文件,甚至運行網(wǎng)頁游戲。...
摘要:然而讓蟲師們垂涎的并不是以上的種種,而是其通過驅(qū)動瀏覽器獲得的解析的能力。所以說這貨在動態(tài)爬取方面簡直是掛逼級別的存在,相較于手動分析更簡單易用,節(jié)省分析打碼時間。一旦設置了隱式等待時間,它的作用范圍就是對象實例的整個生命周期。 selenium——自動化測試工具,專門為Web應用程序編寫的一個驗收測試工具,測試其兼容性,功能什么的。然而讓蟲師們垂涎的并不是以上的種種,而是其通過驅(qū)動瀏...
摘要:且本小白也親身經(jīng)歷了整個從小白到爬蟲初入門的過程,因此就斗膽在上開一個欄目,以我的圖片爬蟲全實現(xiàn)過程為例,以期用更簡單清晰詳盡的方式來幫助更多小白應對更大多數(shù)的爬蟲實際問題。 前言: 一個月前,博主在學過python(一年前)、會一點網(wǎng)絡(能按F12)的情況下,憑著熱血和興趣,開始了pyth...
摘要:而在不久前宣布支持模式而后跟隨的新聞再次勾起我無盡的回憶。那么我們就來談談在和瀏覽器不原生支持模式下如何使用來實現(xiàn)模式進行動態(tài)數(shù)據(jù)的抓取。比較常見的例子在中進行轉(zhuǎn)發(fā)。下面我們進行測試發(fā)現(xiàn)其可以正常的運行。 原文地址: http://52sox.com/python-use-h... 在Python中進行瀏覽器測試時,一般我們會選擇selenium這樣的庫來簡化我們工作量。而有些時候,為...
閱讀 1066·2023-01-14 11:38
閱讀 1062·2023-01-14 11:04
閱讀 901·2023-01-14 10:48
閱讀 2377·2023-01-14 10:34
閱讀 1147·2023-01-14 10:24
閱讀 1026·2023-01-14 10:18
閱讀 654·2023-01-14 10:09
閱讀 733·2023-01-14 10:02