Python爬蟲基礎之selenium
在我們日常爬蟲抓取資料的過程中,面對有些網站會用使用到 Selenium,Selenium是一個Web的自動化測試工具,最初是為網站自動化測試而開發的,就像玩遊戲用的按鍵精靈,可以按指定的命令自動操作。Selenium可以根據的指令,讓瀏覽器自動載入頁面,獲取需要的資料,甚至頁面截圖,或者判斷網站上某些動作是否發生等。
使用Selenium的優點就是可以幫我們避開一系列複雜的通訊流程,假如目標站點有一系列複雜的通訊流程,例如的登入時的滑動驗證等策略。Selenium支援多種瀏覽器,最常見的就是火狐和谷歌瀏覽器。在我們日常使用Selenium無頭瀏覽器去爬取資料的時候有很多的注意事項,一般使用無頭瀏覽器訪問的網站都是具需要進行登入等操作,很容易觸發網站的反爬機制。所以在使用過程中需要加上代理,那麼代理在無頭瀏覽器裡面是怎麼實現的呢?這裡我們可以示例下,代理有億牛雲提供的爬蟲代理為參考:
from selenium import webdriver import string import zipfile # 代理伺服器(產品官網 ) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理驗證資訊 proxyUser = "username" proxyPass = "password" def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password, scheme='http', plugin_path=None): if plugin_path is None: plugin_path = r'D:/{}_{}@t.16yun.zip'.format(proxy_username, proxy_password) manifest_json = """ { "version": "1.0.0", "manifest_version": 2, "name": "16YUN Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] }, "minimum_chrome_version":"22.0.0" } """ background_js = string.Template( """ var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "${scheme}", host: "${host}", port: parseInt(${port}) }, bypassList: ["foobar.com"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "${username}", password: "${password}" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: [""]}, ['blocking'] ); """ ).substitute( host=proxy_host, port=proxy_port, username=proxy_username, password=proxy_password, scheme=scheme, ) with zipfile.ZipFile(plugin_path, 'w') as zp: zp.writestr("manifest.json", manifest_json) zp.writestr("background.js", background_js) return plugin_path proxy_auth_plugin_path = create_proxy_auth_extension( proxy_host=proxyHost, proxy_port=proxyPort, proxy_username=proxyUser, proxy_password=proxyPass) option = webdriver.ChromeOptions() option.add_argument("--start-maximized") # 如報錯 chrome-extensions # option.add_argument("--disable-extensions") option.add_extension(proxy_auth_plugin_path) # 關閉webdriver的一些標誌 # option.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(chrome_options=option) # 修改webdriver get屬性 # script = ''' # Object.defineProperty(navigator, 'webdriver', { # get: () => undefined # }) # ''' # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script}) driver.get(")
關於代理的選擇,有需求和疑問的可以諮詢這裡 。每種爬蟲語言都有其優點和缺點,我們可以在實戰中去學習掌握。 到此這篇關於Python爬蟲實戰之用selenium爬取某旅遊網站的文章就介紹到這了,更多相關Python的文章後續會分享,感興趣的可以關注下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31522063/viewspace-2905624/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【0基礎學爬蟲】爬蟲基礎之自動化工具 Selenium 的使用爬蟲
- python爬蟲基礎之urllibPython爬蟲
- Python:基礎&爬蟲Python爬蟲
- 【0基礎學爬蟲】爬蟲基礎之資料儲存爬蟲
- 【0基礎學爬蟲】爬蟲基礎之檔案儲存爬蟲
- python爬蟲基礎概念Python爬蟲
- python_爬蟲基礎Python爬蟲
- Python爬蟲之Scrapy學習(基礎篇)Python爬蟲
- Python爬蟲之Selenium庫的基本使用Python爬蟲
- Python爬蟲之selenium庫使用詳解Python爬蟲
- Python分散式爬蟲(三) - 爬蟲基礎知識Python分散式爬蟲
- Python爬蟲之路-爬蟲基礎知識(理論)Python爬蟲
- Python爬蟲入門(2):爬蟲基礎瞭解Python爬蟲
- 爬蟲入門基礎-Python爬蟲Python
- 【0基礎學爬蟲】爬蟲基礎之自動化工具 Pyppeteer 的使用爬蟲
- 【0基礎學爬蟲】爬蟲基礎之網路請求庫的使用爬蟲
- 爬蟲基礎爬蟲
- Python爬蟲之路-selenium在爬蟲中的使用Python爬蟲
- python網路爬蟲(9)構建基礎爬蟲思路Python爬蟲
- python爬蟲之Beautiful Soup基礎知識+例項Python爬蟲
- 【0基礎學爬蟲】爬蟲基礎之自動化工具 Playwright 的使用爬蟲
- python 爬蟲基礎知識一Python爬蟲
- 爬蟲基礎篇爬蟲
- 爬蟲基礎---1爬蟲
- python爬蟲基礎與http協議Python爬蟲HTTP協議
- Python爬蟲開發與專案實戰——基礎爬蟲分析Python爬蟲
- Python爬蟲基礎-01-帶有請求引數的爬蟲Python爬蟲
- python實現selenium網路爬蟲Python爬蟲
- 爬蟲基礎知識爬蟲
- 學爬蟲,我需要掌握哪些Python基礎?爬蟲Python
- 2.python爬蟲基礎——Urllib庫Python爬蟲
- Python 基礎學習 網路小爬蟲Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 2-網頁基礎Python爬蟲網頁
- 爬蟲(1) - 爬蟲基礎入門理論篇爬蟲
- 爬蟲-selenium的使用爬蟲
- Python爬蟲學習(9):Selenium的使用Python爬蟲
- Python 爬蟲零基礎教程(1):爬單個圖片Python爬蟲
- Python爬蟲之BeautifulSoupPython爬蟲