【问题标题】:I need help figuring out how to output the end result of this python to a csv我需要帮助弄清楚如何将此 python 的最终结果输出到 csv
【发布时间】:2021-02-12 11:54:14
【问题描述】:

我需要帮助弄清楚如何将此 python 的最终结果输出到 csv (C:/temp/test.csv) 文件。现在写它会打印到提示符。我尝试使用 write,但无论我尝试什么,我都会遇到错误。我的主要目标是将信息输出到不包含 html 的 csv,并用逗号分隔每个结果(result2、result3、result4、result5)。但现在我很高兴能够以它的方式将它输出到 csv 文件。然后我就可以处理剩下的了。

from selenium import webdriver
import time 
from bs4 import BeautifulSoup
import csv

driver = webdriver.Chrome('C:/temp/chromedriver_win32/chromedriver.exe')

driver.get('https://www.dell.com/support/home/en-us/product-support/product/precision-15-5520-laptop/drivers')

time.sleep(3)

element = driver.find_element_by_xpath("//button[contains(.,'Show all')]").click();

page = driver.page_source

driver.close()

soup = BeautifulSoup(page,'html.parser')

results = soup.find(id='downloads-table')

results2 = results.find_all(class_='dl-desk-view')
results3 = results.find_all(class_='details-control sorting_1')
results4 = results.find_all(class_='details-control')
results5 = results.find_all(class_='btn-download-lg btn btn-sm no-break text-decoration-none dellmetrics-driverdownloads btn-outline-primary')

open('C:/temp/Precision_5520.csv', "w").close

with open('C:/temp/Precision_5520.csv', "a") as csvfile:
    writer = csv.writer(csvfile)
    for r2, r3, r4, r5 in zip(results2, results3, results4, results5):
        writer.writerow([results2, results3, results4, results5])

【问题讨论】:

  • 您遇到了什么错误?你也试过使用Pandas吗?
  • 我在上面添加了我目前正在尝试的内容,它不起作用,因为有太多争论,我不知道如何让它以当前输出到控制台的方式写入文件。虽然这也只是将其输出到 txt 文件。如果可能的话,我宁愿不使用熊猫。
  • for results2, results3, results4, results5 in zip(results2, results3, results4, results5): 更改为 for r2, r3, r4, r5 in zip(results2, results3, results4, results5): 您目前所做的是,一旦此循环第一次运行,results2/3/4/5 将不再是列表,而是成为单个值。
  • 好的,谢谢,它确实输出到文件中,现在我只需要研究如何获取它以便添加所有内容,现在它只添加 1 行。
  • 我想我需要将 w 更改为 a,呵呵,不,仍然只将最后一项添加到下一行,我如何才能将每个单独的驱动程序信息输出到单独的行中?

标签: python-3.x selenium csv web-scraping beautifulsoup


【解决方案1】:

这是我到目前为止所拥有的,还有一些问题需要解决,但我从 Yatin 那里得到了关于让所有内容都显示在 csv 文件中的答案:

from selenium import webdriver
import time 
from bs4 import BeautifulSoup
import csv
import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

file_path = filedialog.askopenfilename()

with open(file_path, 'r') as f:
   list = f.readlines()

for items in list:
   driver = webdriver.Chrome('C:/temp/chromedriver_win32/chromedriver.exe')
   driver.get(items)
   time.sleep(3)
   element = driver.find_element_by_xpath("//button[contains(.,'Show all')]").click();
   page = driver.page_source
   driver.close()
   soup = BeautifulSoup(page,'html.parser')
   results = soup.find(id='downloads-table')
   results2 = results.find_all(class_='dl-desk-view')
   results3 = results.find_all(class_='details-control sorting_1')
   results4 = results.find_all(class_='details-control')
   results5 = results.find_all(class_='btn-download-lg btn btn-sm no-break text-decoration-none dellmetrics-driverdownloads btn-outline-primary')
   new_name = items.replace('https://www.dell.com/support/home/en-us/product-support/product/','').replace('/drivers','').replace('\n','')
   open('C:/temp/' + new_name + '.csv', "w").close   
   with open('C:/temp/' + new_name + '.csv', "a") as csvfile:
      writer = csv.writer(csvfile)
      for r2, r3, r4, r5 in zip(results2, results3, results4, results5):
          writer.writerow([r2, r3, r4, r5])

我会尽可能地标记为答案,不知道为什么有人对我的问题给出否定的答案,但没有说明原因:/

【讨论】:

    【解决方案2】:

    尝试遍历您的压缩列表并将每一行写入 csv 文件。您可以通过将标题行写入循环外的文件来添加标题行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2015-07-26
      • 2014-11-20
      • 1970-01-01
      相关资源
      最近更新 更多