我正在嘗試使用 python / selenium 構建一個 webscraper,它從多個網站抓取資料并將資料存盤在 Excel 作業表中。
我要抓取的網站如下:
https://www.ngm.se/marknaden/vardepapper?symbol=ETH ZERO SEK
https://www.ngm.se/marknaden/vardepapper?symbol=BTC ZERO SEK
https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR CARDANO SEK
https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR POLKADOT SEK
https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR SOLANA SEK
https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR UNISWAP SEK
我想從所有站點中抓取“Oms?ttning”、“Volym”和“VWAP”值并將它們存盤在 Excel 表中。
這是我到目前為止得到的:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import ElementNotVisibleException
url = ["https://www.ngm.se/marknaden/vardepapper?symbol=ETH ZERO SEK"]
driver = webdriver.Chrome()
driver.get('https://www.ngm.se/marknaden/vardepapper?symbol=ETH ZERO SEK')
iframe = driver.find_element(By.XPATH, '//iframe').get_attribute("src")
driver.get(iframe)
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@id="detailviewDiv"]//thead[.//span[contains(text(),"Volym")]]/following-sibling::tbody')))
volym = element.text.split('\n')[-3]
vwap = element.text.split('\n')[-2]
Omsaettning = element.text.split('\n')[-4]
print(volym, vwap, Omsaettning)
這樣我就可以從 ETH ZERO SEK 網站列印值,但是我怎樣才能同時從其他 wesbites 中抓取資料,然后將其存盤到 excel 中?也可以對其進行編程,以便硒不需要打開瀏覽器來保存計算機資源?
非常感謝您提前提供的任何幫助!
uj5u.com熱心網友回復:
如果你想在一個回圈中一個接一個地運行它們,那么你可能不得不使用這樣的東西:
urlist = ['https://www.ngm.se/marknaden/vardepapper?symbol=ETH ZERO SEK',
'https://www.ngm.se/marknaden/vardepapper?symbol=BTC ZERO SEK',
'https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR CARDANO SEK',
'https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR POLKADOT SEK',
'https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR SOLANA SEK',
'https://www.ngm.se/marknaden/vardepapper?symbol=VALOUR UNISWAP SEK']
for i in urlist:
driver.get(i)
print(i)
time.sleep(5)
iframe = driver.find_element(By.XPATH, '//iframe').get_attribute("src")
driver.get(iframe)
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
(By.XPATH, '//div[@id="detailviewDiv"]//thead[.//span[contains(text(),"Volym")]]/following-sibling::tbody')))
volym = element.text.split('\n')[-3]
vwap = element.text.split('\n')[-2]
Omsaettning = element.text.split('\n')[-4]
print(volym, vwap, Omsaettning)
driver.quit()
在上述選項中,您必須注意串列索引,因為它們可能不會對所有 url 保持相同。
相反,如果您希望所有這些都分開但同時,那么您可能必須使用該xdist庫(您必須安裝 btw)。但請注意,您需要的工人數量越多,系統將占用的資源就越多。
如果您不希望瀏覽器顯示,那么您可以使用 chromeoption--headless
from selenium.webdriver.chrome.options import Options
opt.add_argument('--headless')
driver = webdriver.Chrome(your driver path, options=opt)
上述選項不會打開瀏覽器可見性;但是,我已經看到在無頭模式下,您的代碼無法找到這個元素(順便說一句,它適用于 head 模式)
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@id="detailviewDiv"]//thead[.//span[contains(text(),"Volym")]]/following-sibling::tbody')))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424262.html
上一篇:從電子郵件中提取資料
