Как скрепить данные таблицы (включая объединенные ячейки), которые имеют одинаковые имена классов, используя python и selenium - PullRequest
0 голосов
/ 07 ноября 2019

Из изображения,

2002 и декабрь, и 1 262,516 - >> В теге html, 2002 как td [1] и декабрь как td [2] и 1 262,516 как td [3]

Непосредственно в следующей строке предположим, что Q4 за 2002 год равен тд [1] 4 017,422 тд [2]

, чтобы я мог хранить 4 017,422 в домене?

https://i.stack.imgur.com/45F3v.png

Если кто-то знает, прокомментируйте свой адрес электронной почты, пожалуйста.

Здесь ссылка для ссылки: https://www.transtats.bts.gov/freight.asp

1 Ответ

1 голос
/ 07 ноября 2019

Вам необходимо импортировать следующие библиотеки.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

Чтобы получить все элементы, попробуйте следующий код. visibility_of_all_elements_located () и следующий xpath

allelements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,"//td[@class='dataTD' and @colspan='2']/following::td[1]")))
for item in allelements:
    print(item.text)

ИЛИ используйте следующий селектор CSS.

allelements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"td.dataTD[colspan='2']+td")))
for item in allelements:
    print(item.text)

** Ожидаемый вывод **:

  Year        Month         Domestic

2003         December        1,424.216

2003Total       -           15,232.525

%Chg over 2002  -
Q4 Only                       5.13% 

2004        January         1,234.820   

РЕДАКТИРОВАНИЕ В зависимости от ожидаемого результата. Вот обновленный код. Создайте одну функцию и передайте строковое значение.

def Get_details(strtext):
  Year=[]
  Month=[]
  Domestic=[]
  allelements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"td.dataTD")))
  for element in allelements:
     if element.text==strtext and element.get_attribute("colspan")=='2':
         Year.append(element.find_element_by_xpath("./parent::tr/preceding-sibling::tr[1]/td[1]").text)
         Month.append(element.find_element_by_xpath("./parent::tr/preceding-sibling::tr[1]/td[2]").text)
         Domestic.append(element.find_element_by_xpath("./parent::tr/preceding-sibling::tr[1]/td[3]").text)
         Year.append(element.text)
         Month.append("-")
         Domestic.append(element.find_element_by_xpath("./following::td[1]").text)
         if element.find_element_by_xpath("./parent::tr/following-sibling::tr[1]/td[1]").get_attribute("colspan")=='2':
             Year.append(element.find_element_by_xpath("./parent::tr/following-sibling::tr[1]/td[1]").text)
             Month.append("-")
             Domestic.append(element.find_element_by_xpath("./parent::tr/following-sibling::tr[1]/td[2]").text)
             Year.append(element.find_element_by_xpath("./parent::tr/following-sibling::tr[2]/td[1]").text)
             Month.append(element.find_element_by_xpath("./parent::tr/following-sibling::tr[2]/td[2]").text)
             Domestic.append(element.find_element_by_xpath("./parent::tr/following-sibling::tr[2]/td[3]").text)


  print(Year)
  print(Month)
  print(Domestic)

Если вы вызываете функцию с помощью 2003 Total

Get_details("2003 Total")

Output :

['2003', '2003 Total', '%Chg over 2002\nQ4 Only', '2004']
['December', '-', '-', 'January']
['1,424.216', '15,232.525', '5.13%', '1,234.820']

Если вы вызываете функцию с помощью 2004 Total

Get_details("2004 Total")

Выход :

['2004', '2004 Total', '%Chg over 2003', '2005']
['December', '-', '-', 'January']
['1,526.984', '16,452.807', '8.01%', '1,280.516']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...