Так что я начинающий программист, которому только что удалось создать свой первый веб-скребок с помощью интернет-учебников. Код работает отлично (извините за отсутствие комментариев), но он выводит все, что мне нужно, в командное окно. Теперь я использую | Например, функция example.txt записывает мои результаты в простой текстовый файл, но когда я переношу этот код в новую среду, эта опция мне недоступна.

Теперь, в конце кода, я пишу текстовый файл, чтобы исправить это, но fileout.write (i.text) захватывает только последнюю строку данных, есть ли способ сохранить все собранные данные в текстовый файл без изменения кода? Там, вероятно, есть, и это действительно просто, но, как я уже сказал, я относительно новичок в этом, и любой совет будет принята с благодарностью.

Полный вывод данных с веб-скребка находится под кодом.

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

driver = webdriver.Chrome()

try:
    driver.get("http://www.caiso.com/TodaysOutlook/Pages/supply.aspx") # load the page
    WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.highcharts-legend-item.highcharts-pie-series.highcharts-color-0'))) # wait till relevant elements are on the page
except TimeoutException:
    pass
finally:
    try:
        stat_elements = driver.find_elements_by_css_selector('.highcharts-legend-item.highcharts-pie-series.highcharts-color-0')
        for el in stat_elements:
            for i in el.find_elements_by_tag_name('span'):
                print (i.text)
    except NoSuchElementException:
        print ("No Such Element Found")

try:
    driver.get("http://smartgriddashboard.eirgrid.com/#all/generation") # load the page
    WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.key-stats-container > .stat-box'))) # wait till relevant elements are on the page
except TimeoutException:
    pass
finally:
    try:
        stat_elements = driver.find_elements_by_css_selector('.key-stats-container > .stat-box')
        for el in stat_elements:
            for i in el.find_elements_by_tag_name('label'):
                print(i.text)
            for i in el.find_elements_by_tag_name('p'):
                print (i.text)
    except NoSuchElementException:
        print ("No Such Element Found")

filename = 'C:\Python\Scripts\data.txt'

fileout = open(filename, 'w')
fileout.write(i.text)
fileout.close()

driver.quit()

Output:

Renewables
21.8% (3,014 MW)
Solar
19.5% (860 MW)
LATEST SYSTEM
GENERATION
4,951 MW
THERMAL GENERATION
(COAL, GAS, OTHER)
76.94 %
RENEWABLE
GENERATION
20.09 %
NET
IMPORT
2.97 %
1
Jack English 13 Мар 2018 в 19:33

2 ответа

Лучший ответ

При том, что вы делаете в данный момент, записываемое в файл «i» будет только последним «i», найденным в вашем цикле. Вы можете решить это одним из двух способов:

  1. Вы можете добавить все свои значения «i» в цикле к массиву, а затем продолжить запись этого массива в файл вместо «i».

  2. Вы можете поместить запись файла в свой цикл, чтобы каждый найденный i записывался в файл. Если вы это сделаете, измените

    fileout = open(filename, 'w')
    

К

    fileout = open(filename, 'a')

Это добавит каждый «i» к файлу вместо перезаписи.

1
admac 13 Мар 2018 в 18:12

Вам действительно нужно видеть результат одновременно с сохранением его в файл? Если нет, то запустите вашу программу (ту, которая просто отправляет свои результаты в tee) как

python ... > C:\Path\to\directory\data.txt

И результаты будут сохранены в этом файле. Затем вы можете использовать команду type или аналогичную для просмотра.

0
holdenweb 13 Мар 2018 в 16:47