硒鉻磚司機司機
磚的社區,我看到重複的問題關於硒磚上安裝驅動程序。在磚上安裝硒可以令人吃驚,但例如,有時我們需要獲取一些數據集的背後認證,和硒是最方便的工具。當然,永遠記得先檢查最簡單的選擇。舉個例子,如果我們需要下載一個HTML文件,我們可以使用SparkContext.addFile()或隻使用圖書館的請求。如果我們需要解析HTML沒有模擬用戶操作複雜或下載頁麵,我們可以用BeautifulSoap。請記住,硒是運行在司機隻有(工人們不使用),所以就硒是單節點集群是首選。
安裝
最簡單的解決方案是使用apt-get安裝ubuntu軟件包,但往往版本的ubuntu回購已經過時了。最近解決方案停止為我工作,我決定采取一種不同的方法,從chromium-browser-snapshots司機和二進製文件https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html下麵的腳本下載最新版本的瀏覽器二進製文件和驅動程序。一切都保存到/ tmp /鉻目錄。我們還必須設置鉻主目錄/ tmp /鉻/ chrome-user-data-dir。有時,鉻抱怨缺少庫。這就是為什麼我們還安裝libgbm-dev。下麵的腳本將創建一個bash文件實施提到的步驟。
dbutils.fs.mkdirs (“dbfs: /磚/腳本/”)dbutils.fs.put(“/磚/腳本/ selenium-install。sh”、“”“# !/bin/bash % sh LAST_VERSION = " https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2FLAST_CHANGE?alt =媒體”版本= $ (curl - s - s LAST_VERSION美元)如果[- d $版本);然後回聲”版本已經安裝了“退出fi rm射頻/ tmp /鉻/ $版本mkdir - p / tmp /鉻/ $ URL = " https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F版本% 2 fchrome-linux.zip美元?alt =媒體" ZIP = " $ {VERSION} -chrome-linux。郵政“旋度- # $ URL > / tmp /鉻/ $ zip解壓/ tmp /鉻/ zip - d / tmp /鉻/美元版本URL = " https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F版本% 2 fchromedriver_linux64.zip美元?alt =媒體" ZIP = " $ {VERSION} -chromedriver_linux64。郵政“旋度- # $ URL > / tmp /鉻/ $ zip解壓/ tmp /鉻/ zip - d / tmp /鉻/美元版本mkdir - p / tmp /鉻/ chrome-user-data-dir rm - f / tmp /鉻/最新ln - s / tmp /鉻/版本/ tmp /鉻/美元最新#避免錯誤關於失蹤庫sudo apt-get更新sudo apt-get安裝- y libgbm-dev”“”,真的)顯示(dbutils.fs.ls (dbfs: /磚/腳本/))
腳本被保存到DBFS存儲/ DBFS /磚/腳本/ selenium-install。上海我們可以把它作為服務器的init腳本。單擊您的集群在“計算”- >點擊“編輯”- >“配置”選項卡- >向下滾動到“高級選項”- >點擊“Init腳本”- >選擇“DBFS”和“Init腳本路徑”設置為“/ / selenium-install DBFS /磚/腳本。sh”- >點擊“添加”。
如果你還沒有設置init腳本,請運行以下命令。
% / selenium-install.sh sh / dbfs /磚/腳本
現在我們可以安裝硒。單擊您的集群在“計算”- >點擊“庫”- >點擊“安裝新”- >點擊“PyPI”- >“包”設置為“硒”- >點擊“安裝”。
或者(不太方便),您可以安裝它每次在你的筆記本上運行以下命令。
% pip安裝硒
所以讓我們開始webdriver。我們可以看到,服務和binary_location指向驅動程序和二進製文件,由我們的腳本下載並打開。
從硒從selenium.webdriver.chrome進口webdriver。服務導入服務s =服務(“/ tmp /鉻/最近/ chromedriver_linux64 / chromedriver”)選項= webdriver.ChromeOptions()選項。binary_location = " / tmp /鉻/最近/ chrome-linux /鉻”options.add_argument(“無頭”)options.add_argument (——disable-infobars) options.add_argument (——disable-dev-shm-usage) options.add_argument (——no-sandbox) options.add_argument (——remote-debugging-port = 9222) options.add_argument ('——homedir = / tmp /鉻/ chrome-user-data-dir’) options.add_argument ('——user-data-dir = / tmp /鉻/ chrome-user-data-dir’)首選項= {“download.default_directory”:“/ tmp /鉻/ chrome-user-data-di”、“下載。prompt_for_download”:假}options.add_experimental_option(“首選項”,控製台)司機= webdriver。Chrome(服務= s選項=選項)
讓我們測試webdriver。我們將最後一個帖子的社區,將它們轉換為dataframe磚。
從selenium.webdriver.support selenium.webdriver.common.by進口的。ui從selenium.webdriver進口WebDriverWait。支持導入expected_conditions EC司機。執行(“獲得”,{“url”:“https://community.m.eheci.com/s/discussions?page=1&filter=All”}) = (elem日期。文本的elem WebDriverWait(司機,20)除非(EC.visibility_of_all_elements_located((通過。CSS_SELECTOR lightning-formatted-date-time)))] = [elem頭銜。文本的elem WebDriverWait(司機,20)除非(EC.visibility_of_all_elements_located((通過。CSS_SELECTOR,”p [class = ' Sub-heaading1 '] "))))
從pyspark.sql。類型進口StringType、StructType StructField模式= StructType ([StructField(“日期”,StringType ()), StructField(“標題”,StringType ()))) df =火花。createDataFrame(列表(zip(日期、標題)),模式=)顯示(df)
我們可以看到最新的帖子dataframe。現在我們可以離開司機。
driver.quit ()
那篇文章準備的版本運行筆記本可以在:https://github.com/hubert-dudek/databricks-hubert/blob/main/projects/selenium/chromedriver.py
進口筆記本進磚,去文件夾在您的“工作場所”- >從箭頭菜單中,選擇“URL”- >點擊“導入”- >https://raw.githubusercontent.com/hubert-dudek/databricks-hubert/main/projects/selenium/chromedriver..。作為URL。