将Web Scraping结果写入.txt文件

时间:2018-03-13 16:33:46

标签: python selenium web-scraping

所以我是一名新手程序员,他刚刚在互联网教程的帮助下成功建立了他的第一个网络刮刀。代码完美运行(抱歉缺少注释),但它会在命令窗口中打印出我需要的所有内容。现在我一直在使用|使用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 %

2 个答案:

答案 0 :(得分:1)

根据你目前所做的事情,写入文件的'i'将只是你循环中找到的最后一个'我'。您可以通过以下两种方式之一解决这个问题:

  1. 您可以在循环到数组时附加所有'i'值,然后继续将此数组写入文件而不是'i'。

  2. 您可以将文件写入循环中,以便将找到的每个'i'写入文件。如果您这样做,请更改

    fileout = open(filename, 'w')
    
  3.     fileout = open(filename, 'a')
    

    这会将每个'i'附加到文件而不是覆盖。

答案 1 :(得分:0)

在将文件保存到文件的同时,是否真的需要查看输出?如果没有,则运行您的程序(仅将结果发送到tee的那个)作为

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

,结果将保存在该文件中。然后,您可以使用type命令或类似命令查看它。