如何将抓取数据保存到 CSV 文件中?

Posted

技术标签:

【中文标题】如何将抓取数据保存到 CSV 文件中?【英文标题】:How To Save Scrape Data Into CSV File? 【发布时间】:2020-10-11 11:38:35 【问题描述】:

我对 Python、Selenium 和 BeautifulSoup 非常陌生。我已经在网上看到了很多教程,但我很困惑。请帮我。 所以基本上这是我的python代码:

    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 bs4 import BeautifulSoup as bs
    
    #import requests
    import time 
    #import csv
    
    passwordStr = '***'
    usernameStr='***'
    
    chrome_path = r'C:\Users\wana isa\geckodriver-v0.26.0-win64\geckodriver.exe'
    browser = webdriver.Firefox(executable_path=r'C:\Users\wana isa\geckodriver-v0.26.0-win64\geckodriver.exe')
    browser.get(('http://*********/'))
    
    wait = WebDriverWait(browser,10)
    
    
    # wait for transition then continue to fill items
    #time.sleep(2)
    password = wait.until(EC.presence_of_element_located((By.ID, 'txt_Password')))
    password.send_keys(passwordStr)
    username = wait.until(EC.presence_of_element_located((By.ID, 'txt_Username')))
    username.send_keys(usernameStr)
    
    signInButton = browser.find_element_by_id('button')
    signInButton.click()
    browser.get(('http://******'))
    
    
    MainTab=browser.find_element_by_name('mainli_waninfo').click()
    SubTab=browser.find_element_by_name('subli_bssinfo').click()
    browser.switch_to.frame(browser.find_element_by_id('frameContent'))
    
    html=browser.page_source
    soup=bs(html,'lxml')
    #print(soup.prettify())
    
#for Service Proversioning Status , This is the data that i scrape and need to be saved into csv
    spsList=['ONT  Registration Status','OLT Service Configuration Status','EMS Configuration Status','ACS Registration Status']
    sps_id=['td1_2','td2_2','td3_2','td4_2']
    for i in range(len(sps_id)):
        elemntValu = browser.find_element_by_id(sps_id[i]).text
        output= print(spsList[i] + " : "+ elemntValu)
        
    browser.close()

这是输出:

如果您能帮助我,我将不胜感激。

【问题讨论】:

【参考方案1】:

将此导入添加到您的代码中:

import csv

将以下内容添加到您的代码中:

  with open('FileName.csv', 'w', newline='') as file:
      writer = csv.writer(file)
      for i in range(len(sps_id)):
            elemntValu = browser.find_element_by_id(sps_id[i]).text
            output= print(spsList[i] + " : "+ elemntValu)
            writer.writerow([spsList[i], elemntValu])
  f.close()
  browser.close()

【讨论】:

我收到了这个错误 --> ValueError: I/O operation on closed file @Joojoo 编辑我添加了关闭文件,尝试告诉我它是否有效 非常感谢,我已经明白了。但我有另一个问题。这个抓取数据是动态的。每次我运行它时,该值都会改变。如果每次我运行它时已经保存的数据在 csv 中自动更改,是否有可能? @Joojoo 该文件实际上处于“w”模式,这意味着如果文件不存在则创建文件,如果存在则覆盖,因此您可以使用 open('FileName.csv', 'w',newline='')` 到这个` with open('FileName.csv', 'w')` 非常感谢!这真的对我有很大帮助。我不太习惯这种编码。这是我第一次抓取数据,这是我第一次使用 python。我得到了另一个问题,上面的数据在列表中。如果我想把它做成一张桌子怎么办?我应该使用熊猫吗?

以上是关于如何将抓取数据保存到 CSV 文件中?的主要内容,如果未能解决你的问题,请参考以下文章

抓取的网站数据未写入 CSV

使用 python 和 Beautifulsoup4 从抓取数据中写入和保存 CSV 文件

如何将抓取的数据从 Scrapy 以 csv 或 json 格式上传到 Amazon S3?

python web抓取并将数据写入csv

使用来自同一 URL 的多个 POST 数据进行抓取

抓取:将存储为图片的数据添加到 python 3.5 中的 CSV 文件