簡體   English   中英

如何使用python/selenium點擊表格的一行來抓取集合數據?

[英]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)

Output

設置名稱 參考 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM