硒到数据框导出到CSV

时间:2020-09-12 00:51:54

标签: python selenium dataframe loops csv

我在将所有数据都放入数据框中时遇到了问题,因此将同样的数据导入CSV

我有此代码:

class Table:

def __init__(self, driver):

    self.driver = driver

def get_column_info(self):

    column_info = []
    columns = self.driver.find_elements_by_xpath("/html/body/div[1]/main/div[2]/div[3]/div/div/div[5]/div[2]/table/thead/tr/th")
    for column in columns:
        column_info.append(str(column.text.replace("%","")))
        writer2.writerow(column_info)
    return column_info


def get_results(self, index=None):

   columns = self.get_column_info()
   data = {}
   elements = self.driver.find_elements_by_xpath("//div[@id = 'resumen_mensual']/table/tbody[@id = 'body_tmes' ]/tr[contains(@class, 'ini')]{}"
                                                .format("[{}]".format(index) 

    for element in elements:
       current_index = elements.index(element) + 1 if not index else index
       parsed_data = {}
       for column in columns:
           value = element.find_element_by_xpath("//div[@id = 'resumen_mensual']/table/tbody[@id = 'body_tmes' ]/tr[contains(@class, 'ini')][{}]"
                                                  "/td[{}]"
                                                  .format(current_index,columns.index(column) + 1)).text

           parsed_data.update({column: str(value)})
       data.update(parsed_data)

   return data

我的输出如下:

[{'DÍA':'30','T. MEDIA”:“ 25°C”,“ T。 MÁX:'35°C','T。 MÍN”:“ 15°C”,“ V。 MEDIA VIENTO”:“ 4.3 km / h”,“ RACHASMÁX”:“-km / h”,“PRESIÓNMEDIA”:“ 1012 hPa”,“ LLUVIA”:“-mm”}]

这只是我从网站的表格中提取的最后一行数据

如果我以此方式修改代码(修改在data.update中):

 for element in elements:
       current_index = elements.index(element) + 1 if not index else index
       parsed_data = {}
       for column in columns:
           value = element.find_element_by_xpath("//div[@id = 'resumen_mensual']/table/tbody[@id = 'body_tmes' ]/tr[contains(@class, 'ini')][{}]"
                                                  "/td[{}]"
                                                  .format(current_index,columns.index(column) + 1)).text

           parsed_data.update({column: str(value)})
       data.update({current_index:  parsed_data})

   return data

我明白了:

[{1:{'DÍA':'1','T. MEDIA”:“ 14°C”,“ T。 MÁX:'19°C','T。 MÍN”:“ 8°C”,“ V。 MEDIA VIENTO”:“ 9.1 km / h”,“ RACHASMÁX”:“-km / h”,“PRESIÓNMEDIA”:“ 1027.3 hPa”,“ LLUVIA”:“-mm”},2:{'DÍA ':'2','T. MEDIA”:“ 17°C”,“ T。 MÁX:'22°C','T。 MÍN”:“ 9°C”,“ V。 MEDIA VIENTO”:“ 6.4 km / h”,“ RACHASMÁX”:“-km / h”,“PRESIÓNMEDIA”:“ 1026.4 hPa”,“ LLUVIA”:“-mm”},..... ......直到30

所以基本上我需要所有行,但是我不希望在数据之间出现行数(标有粗斜体的数字),所以我该怎么办?

[{ 1: {'DÍA':'1','T. MEDIA”:“ 14°C”,“ T。 MÁX:'19°C','T。 MÍN”:“ 8°C”,“ V。 MEDIA VIENTO”:“ 9.1 km / h”,“ RACHASMÁX”:“-km / h”,“PRESIÓNMEDIA”:“ 1027.3 hPa”,“ LLUVIA”:“-mm”}, 2: {'DÍA':'2','T. MEDIA”:“ 17°C”,“ T。 MÁX:'22°C','T。 MÍN”:“ 9°C”,“ V。 MEDIA VIENTO”:“ 6.4 km / h”,“ RACHASMÁX”:“-km / h”,“PRESIÓNMEDIA”:“ 1026.4 hPa”,“ LLUVIA”:“-mm”}, 3: {'DÍA':'3 ........

我应该更改什么,我知道它必须与循环有关,但是我无法弄清楚

1 个答案:

答案 0 :(得分:0)

您正在使用字典,并且可以在键值对中使用。

这里有两个字典

  1. parsed_data
  2. data

因此,在第一种情况下,data.update(parsed_data)只会得到最后一个值,因为您正在使用data字典元素更新parsed_data字典,并且每次都会覆盖它。

在第二种情况下,您要使添加到current_index的每个字典(parsed_data)的键都为唯一的data,这就是为什么您要查看每个字典中具有唯一键的所有记录的原因( parsed_data