[英]How to use python/selenium to click on a row of a table to scrape set data?
我對數據抓取還很陌生,所以如果我遺漏了一些基本的東西,我會提前道歉。
我的目標是從此數據庫中提取數據: https://ilthermo.boulder.nist.gov/
據我所知,Beutiful Soup 應該可以輕松完成這類任務。 不幸的是,數據庫的 URL 不會隨着導航而改變。 在進入我感興趣的頁面之前,我需要輸入一系列命令。
即,我需要:
(1)點擊“Search ILThermo” (2)輸入元件名稱 (3)Select 元件數 (4)Select 一個屬性
到目前為止,我已經使用了 Selenium 並且一切似乎都正常工作。
這是一個例子:
` from selenium import webdriver 導入時間
chromedriver = "/users/Me/downloads/chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get('https://ilthermo.boulder.nist.gov/')
SearchILThermo = '//*[@id="sbutton_label"]'
IonicLiquid = '//*[@id="cmp"]'
NumberComp = '//*[@id="ncmp"]'
Property = '//*[@id="prp"]'
Submit = '//*[@id="sDialog"]/div[2]/div[2]/span[1]'
driver.find_element_by_xpath(SearchILThermo).click()
time.sleep(1)
driver.find_element_by_xpath(IonicLiquid).send_keys("1-Butyl-3-methylimidazolium tetrafluoroborate")
driver.find_element_by_xpath(NumberComp).send_keys('1 - pure compound')
driver.find_element_by_xpath(Property).send_keys('Viscosity')
time.sleep(1)
driver.find_element_by_xpath(Submit).click()`
這些行讓我進入以下頁面:
此時,單擊左側面板上的一行可在右側面板上顯示一個表格。 右側面板上的這些表格是我想要提取的(可能使用 Beautiful Soup),從左側面板上的第一行開始,然后循環遍歷我上面給出的輸入集的所有頁面的所有行。
所以,我需要:
(5) 單擊左側面板上的一行(順序) (6) 使用 Beautiful Soup 提取右側面板上的表格(尚未嘗試過) (7) 對左側面板上的所有行和所有頁面進行 Cicle
單擊左側面板上的一行是我目前卡住的地方。
從開發人員工具來看,左側面板上每一行的 xpath 似乎是這樣的:
第一行: //*[@id="dsgrid-row-MOByt"]/table/tr
第二行: //*[@id="dsgrid-row-hkDds"]/table/tr/
如果我做:
Row = '//*[@id="dsgrid-row-MOByt"]/table/tr' driver.find_element_by_xpath(Row).click()
它應該點擊第一行。 但是由於我需要對所有行進行循環,因此我需要循環訪問這些行。 理想情況下是這樣的:
Row = '//*[@id="dsgrid-row-i"]/table/tr'
但這當然行不通。
是否有其他方法可以讓 Selenium 單擊左側面板中的特定行(給定其編號)?
不確定您是否真的應該使用selenium
- 使用 api 時也可以選擇requests
。
在這里您可以獲得關鍵字的結果:
f'https://ilthermo.boulder.nist.gov/ILT2/ilsearch?cmp=&ncmp=0&year=&auth=&keyw={keyword}&prp=0'
在這里,您可以獲得每組的相應數據:
f"https://ilthermo.boulder.nist.gov/ILT2/ilset?set={d['setid']}"
有限/切片前五個結果演示,只適合您的需求。
import requests
import pandas as pd
keyword = 'Viscosity'
url = f'https://ilthermo.boulder.nist.gov/ILT2/ilsearch?cmp=&ncmp=0&year=&auth=&keyw={keyword}&prp=0'
ref_data = requests.get(url).json()
data = []
for e in ref_data['res'][:5]:
d = dict(zip(ref_data['header'],e))
set_data = requests.get(f"https://ilthermo.boulder.nist.gov/ILT2/ilset?set={d['setid']}").json()
header = [item for items in set_data['dhead'] for item in items if item and item != 'Liquid']
header.append('Liquid')
for x in [[item for items in sublist for item in items] for sublist in set_data['data']]:
d.update(
dict(
zip(header, x)
)
)
data.append(d)
pd.DataFrame(data)
設置名稱 | 參考 | prp | 階段 | cmp1 | cmp2 | cmp3 | NP | 納米1 | 納米2 | 溫度,K | 1-丁基-1-甲基吡咯烷二氰胺的摩爾分數 | 壓力,千帕 | 頻率,兆赫 | 電導率,S/m | 液體 | 1-丁基-3-甲基咪唑雙(三氟甲基磺酰基)亞胺的摩爾分數 | 粘度,Pa•s | 1-丁基-3-甲基咪唑甲磺酸鹽的摩爾分數 | 摩爾體積,m 3 /mol | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | KyTBg | 澤克等人。 (2015) | 導電率 | 液體 | AAQcoP | AAoDJf | 1540 | .γ-丁內酯 | 1-丁基-1-甲基吡咯烷鎓二氰胺 | 323.15 | 1個 | 100 | 0.01 | 2.529 | 0.025 | 楠 | 楠 | 楠 | 楠 | |
1個 | KyTBg | 澤克等人。 (2015) | 導電率 | 液體 | AAQcoP | AAoDJf | 1540 | .γ-丁內酯 | 1-丁基-1-甲基吡咯烷鎓二氰胺 | 323.15 | 1個 | 100 | 0.01 | 2.529 | 0.025 | 楠 | 楠 | 楠 | 楠 | |
2個 | KyTBg | 澤克等人。 (2015) | 導電率 | 液體 | AAQcoP | AAoDJf | 1540 | .γ-丁內酯 | 1-丁基-1-甲基吡咯烷鎓二氰胺 | 323.15 | 1個 | 100 | 0.01 | 2.529 | 0.025 | 楠 | 楠 | 楠 | 楠 | |
3個 | KyTBg | 澤克等人。 (2015) | 導電率 | 液體 | AAQcoP | AAoDJf | 1540 | .γ-丁內酯 | 1-丁基-1-甲基吡咯烷鎓二氰胺 | 323.15 | 1個 | 100 | 0.01 | 2.529 | 0.025 | 楠 | 楠 | 楠 | 楠 | |
4個 | KyTBg | 澤克等人。 (2015) | 導電率 | 液體 | AAQcoP | AAoDJf | 1540 | .γ-丁內酯 | 1-丁基-1-甲基吡咯烷鎓二氰胺 | 323.15 | 1個 | 100 | 0.01 | 2.529 | 0.025 | 楠 | 楠 | 楠 | 楠 | |
4251 | qwN | 薩法羅夫等人。 (2018c) | 粘度 | 液體 | ABNWKs | 394 | 1-辛基-3-甲基咪唑六氟磷酸鹽 | 楠 | 413.82 | 楠 | 101.325 | 楠 | 楠 | 0.0004 | 楠 | 0.0097 | 楠 | 楠 | ||
4252 | qwN | 薩法羅夫等人。 (2018c) | 粘度 | 液體 | ABNWKs | 394 | 1-辛基-3-甲基咪唑六氟磷酸鹽 | 楠 | 413.82 | 楠 | 101.325 | 楠 | 楠 | 0.0004 | 楠 | 0.0097 | 楠 | 楠 | ||
4253 | qwN | 薩法羅夫等人。 (2018c) | 粘度 | 液體 | ABNWKs | 394 | 1-辛基-3-甲基咪唑六氟磷酸鹽 | 楠 | 413.82 | 楠 | 101.325 | 楠 | 楠 | 0.0004 | 楠 | 0.0097 | 楠 | 楠 | ||
4254 | qwN | 薩法羅夫等人。 (2018c) | 粘度 | 液體 | ABNWKs | 394 | 1-辛基-3-甲基咪唑六氟磷酸鹽 | 楠 | 413.82 | 楠 | 101.325 | 楠 | 楠 | 0.0004 | 楠 | 0.0097 | 楠 | 楠 | ||
4255 | qwN | 薩法羅夫等人。 (2018c) | 粘度 | 液體 | ABNWKs | 394 | 1-辛基-3-甲基咪唑六氟磷酸鹽 | 楠 | 413.82 | 楠 | 101.325 | 楠 | 楠 | 0.0004 | 楠 | 0.0097 | 楠 | 楠 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.