【发布时间】:2020-09-08 21:54:06
【问题描述】:
我开始学习 Python,我有这段代码可以很好地用于网络抓取,我已经有了我想要的信息,我正在将这些数据发送到 CSV,但它只在一个单元格中打印了所有文本。
你能帮我解决这个问题,以便我可以在不同的列中打印每个元素吗?
这是我的代码:
from bs4 import BeautifulSoup
import csv
with open('output_file_name', 'w', newline='') as csv_file:
writer3 = csv.writer(csv_file, delimiter=';')
file4 = open('hola4.csv', 'w', newline='')
writer4 = csv.writer(file4)
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) if index else ""))
for elementos in elements:
prueba = elementos.text.strip()
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
def get_number_of_results(self):
return len(self.driver.find_elements_by_xpath("//div[@id = 'resumen_mensual']/table/tbody[@id = 'body_tmes' ]/tr[contains(@class, 'ini')]"))
if "__main__" == __name__:
table = Table(driver)
writer4.writerow([table.get_column_info()])
writer3.writerow([table.get_results()])
table = Table(driver)
print(table.get_column_info())
如果我运行它,我就会得到这个结果:
['DÍA', 'T. MEDIA', 'T. MÁX', 'T. MÍN', 'V. MEDIA VIENTO', 'RACHAS MÁX', 'PRESIÓN MEDIA', 'LLUVIA']
在 csv 中:
【问题讨论】:
标签: python csv beautifulsoup