Как использовать python/selenium, чтобы щелкнуть строку таблицы для очистки заданных данных?

Я новичок в очистке данных, поэтому заранее извиняюсь, если упустил что-то основное.

Моя цель — извлечь данные из этой базы данных: https://ilthermo.boulder.nist.gov/

введите здесь описание изображения

Из того, что я читал, Beutiful Soup должен быть удобен для таких задач. К сожалению, URL-адрес базы данных не меняется при навигации. И прежде чем я перейду к интересующим меня страницам, мне нужно ввести ряд команд.

А именно мне нужно:

(1) Нажмите «Поиск ILthermo». (2) Введите имя компонента (3) Выберите количество компонентов (4) Выберите свойство

До этого момента я использовал Selenium, и все работало как надо.

Вот пример:

` из веб-драйвера импорта селена время импорта

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) Прокрутите все строки и все страницы на левой панели.

Нажав на строку на левой панели, я сейчас застрял.

Из инструментов разработчика кажется, что xpath для каждой строки на левой панели выглядит примерно так:

1-й ряд: //*[@id = "dsgrid-row-MOByt"]/table/tr

2-й ряд: //*[@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 щелкнуть определенную строку (учитывая ее номер) на левой панели?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не уверен, что вам действительно следует использовать selenium - requests также может быть вариантом при использовании API.

Здесь вы получите результаты по ключевому слову:

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)

Выход

установить идентификатор ссылка прп фазы cmp1 cmp2 cmp3 нп нм1 нм2 Температура, К Молярная доля дицианамида 1-бутил-1-метилпирролидиния Давление, кПа Частота, МГц Электропроводность, См/м Жидкость Молярная доля бис(трифторметилсульфонил)имида 1-бутил-3-метилимидазолия Вязкость, Па•с Молярная доля метансульфоната 1-бутил-3-метилимидазолия Молярный объем, м3/моль 0 КиТБг Зек и др. (2015) Электрическая проводимость Жидкость AAQcoP AAoDJf 1540 .gamma.-бутиролактон 1-бутил-1-метилпирролидиния дицианамид 323,15 1 100 0,01 2,529 0,025 нан нан нан нан 1 КиТБг Зек и др. (2015) Электрическая проводимость Жидкость AAQcoP AAoDJf 1540 .gamma.-бутиролактон 1-бутил-1-метилпирролидиния дицианамид 323,15 1 100 0,01 2,529 0,025 нан нан нан нан 2 КиТБг Зек и др. (2015) Электрическая проводимость Жидкость AAQcoP AAoDJf 1540 .gamma.-бутиролактон 1-бутил-1-метилпирролидиния дицианамид 323,15 1 100 0,01 2,529 0,025 нан нан нан нан 3 КиТБг Зек и др. (2015) Электрическая проводимость Жидкость AAQcoP AAoDJf 1540 .gamma.-бутиролактон 1-бутил-1-метилпирролидиния дицианамид 323,15 1 100 0,01 2,529 0,025 нан нан нан нан 4 КиТБг Зек и др. (2015) Электрическая проводимость Жидкость AAQcoP AAoDJf 1540 .gamma.-бутиролактон 1-бутил-1-метилпирролидиния дицианамид 323,15 1 100 0,01 2,529 0,025 нан нан нан нан 4251 oyqwN Сафаров и др. (2018с) Вязкость Жидкость ABNWK 394 1-октил-3-метилимидазолия гексафторфосфат нан 413,82 нан 101.325 нан нан 0,0004 нан 0,0097 нан нан 4252 oyqwN Сафаров и др. (2018с) Вязкость Жидкость ABNWK 394 1-октил-3-метилимидазолия гексафторфосфат нан 413,82 нан 101.325 нан нан 0,0004 нан 0,0097 нан нан 4253 oyqwN Сафаров и др. (2018с) Вязкость Жидкость ABNWK 394 1-октил-3-метилимидазолия гексафторфосфат нан 413,82 нан 101.325 нан нан 0,0004 нан 0,0097 нан нан 4254 oyqwN Сафаров и др. (2018с) Вязкость Жидкость ABNWK 394 1-октил-3-метилимидазолия гексафторфосфат нан 413,82 нан 101.325 нан нан 0,0004 нан 0,0097 нан нан 4255 oyqwN Сафаров и др. (2018с) Вязкость Жидкость ABNWK 394 1-октил-3-метилимидазолия гексафторфосфат нан 413,82 нан 101.325 нан нан 0,0004 нан 0,0097 нан нан

Другие вопросы по теме