鱼C论坛

 找回密码
 立即注册
查看: 1844|回复: 5

[已解决]python中使用openpyxl保存数据问题

[复制链接]
发表于 2023-8-28 09:39:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我只想让每条数据单独占用一行,然后逐次占用下一行,但是所有的数据都在A1表格单元中。如图所示:
微信截图_20230828093551.jpg



代码如下:
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
import openpyxl

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}

browser = webdriver.Edge()
browser.get("https://www.52pojie.cn/")
a = browser.find_element(By.XPATH,"//*[@id='category_']/table/tbody/tr[2]").text

wb = openpyxl.Workbook()
sheet = wb.active
data0 = [a]
for value in data0:
    sheet.append([value])
wb.save("52pj帖子标题名称.xlsx")

time.sleep(3)



请问该如何修改这些代码呢?
最佳答案
2023-8-28 10:11:02
python小小白哟 发表于 2023-8-28 10:00
你好 , 报错了,如下内容:
TypeError: Value must be a list, tuple, range or generator, or a dict. ...

import time
from selenium.webdriver.common.by import By
from selenium import webdriver
import openpyxl

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}

browser = webdriver.Edge()
browser.get("https://www.52pojie.cn/")
a = browser.find_element(By.XPATH,"//*[@id='category_']/table/tbody/tr[2]").text

wb = openpyxl.Workbook()
sheet = wb.active
data0 = a.split('\n')              # 改了这行
for value in data0:
    sheet.append([value])  # 修改这一行,将value作为一个单独的列表插入到下一个空行中
wb.save("52pj帖子标题名称.xlsx")

time.sleep(3)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-28 09:40:14 | 显示全部楼层
你好!根据你的描述,所有的数据都被保存在A1单元格中。这是因为你在循环中使用了 sheet.append([value]) ,它会将每个值作为一个列表插入到下一个空行中。为了让每条数据单独占用一行,你需要将每个值作为一个单独的列表插入到下一个空行中。

以下是修改后的代码:
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
import openpyxl

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}

browser = webdriver.Edge()
browser.get("https://www.52pojie.cn/")
a = browser.find_element(By.XPATH,"//*[@id='category_']/table/tbody/tr[2]").text

wb = openpyxl.Workbook()
sheet = wb.active
data0 = [a]
for value in data0:
    sheet.append(value)  # 修改这一行,将value作为一个单独的列表插入到下一个空行中
wb.save("52pj帖子标题名称.xlsx")

time.sleep(3)

这样修改后,每个值都会单独占用一行,而不是都被保存在A1单元格中。希望能对你有所帮助!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-28 09:40:18 | 显示全部楼层
根据你提供的代码和描述,我发现问题可能出在以下几个方面:

1. 数据存储的位置:你使用openpyxl库来创建Excel文件并保存数据,但是所有的数据都保存在了A1单元格中。这是因为未指定要写入的目标单元格位置。

2. 数据的获取:你使用Selenium获取数据后,只保存了一条数据,这也导致了只有一条数据被写入Excel文件。

为了解决上述问题,你可以按照以下步骤修改代码:

1. 将data0更名为data,并将获取的所有数据都保存在列表data中。

2. 在写入数据到Excel文件时,使用循环遍历每个数据,并将它们逐行写入到不同的单元格中。

下面是修改后的代码示例:
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
import openpyxl

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}

browser = webdriver.Edge()
browser.get("https://www.52pojie.cn/")

# 获取所有数据保存到列表中
data = []
elements = browser.find_elements(By.XPATH, "//*[@id='category_']/table/tbody/tr")
for element in elements:
    data.append(element.text)

wb = openpyxl.Workbook()
sheet = wb.active

# 逐行写入数据
for value in data:
    sheet.append([value])

wb.save("52pj帖子标题名称.xlsx")
time.sleep(3)

通过以上修改,你将能够实现每条数据单独占用一行,并逐次占用下一行的效果。每个数据将会被写入到不同的单元格中。

请注意,以上代码只是基于你提供的信息进行的修改,因此仅供参考。你可能需要根据具体情况进行微调和优化。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-28 10:00:20 | 显示全部楼层
isdkz 发表于 2023-8-28 09:40
你好!根据你的描述,所有的数据都被保存在A1单元格中。这是因为你在循环中使用了 sheet.append([value])  ...

你好 , 报错了,如下内容:
TypeError: Value must be a list, tuple, range or generator, or a dict. Supplied value is <class 'str'>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-28 10:11:02 | 显示全部楼层    本楼为最佳答案   
python小小白哟 发表于 2023-8-28 10:00
你好 , 报错了,如下内容:
TypeError: Value must be a list, tuple, range or generator, or a dict. ...

import time
from selenium.webdriver.common.by import By
from selenium import webdriver
import openpyxl

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}

browser = webdriver.Edge()
browser.get("https://www.52pojie.cn/")
a = browser.find_element(By.XPATH,"//*[@id='category_']/table/tbody/tr[2]").text

wb = openpyxl.Workbook()
sheet = wb.active
data0 = a.split('\n')              # 改了这行
for value in data0:
    sheet.append([value])  # 修改这一行,将value作为一个单独的列表插入到下一个空行中
wb.save("52pj帖子标题名称.xlsx")

time.sleep(3)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-28 10:25:03 | 显示全部楼层
isdkz 发表于 2023-8-28 10:11
import time
from selenium.webdriver.common.by import By
from selenium import webdriver

非常感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 15:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表