鱼C论坛

 找回密码
 立即注册
查看: 1670|回复: 11

[已解决]使用openpyxl 怎么把第二页的数据保存下来

[复制链接]
发表于 2020-8-13 10:46:56 | 显示全部楼层 |阅读模式

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

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

x
RT
内容已经拿到手了,测试第一页的时候很正常
但开始弄翻页的的时候,第二页的数据会把第一页的覆盖
求各位大神帮帮,第一时间给最佳



  1. #应该就是这部分代码缺少什么
  2. wb = openpyxl.Workbook()
  3.     wb.guess_types = True
  4.     ws = wb.active

  5.     ws.append(['投诉编号','投诉品牌','投诉车系','投诉车型','问题简述','投诉时间','投诉状态'])


  6.     for each in datalist:
  7.         print(each)
  8.         ws.append(each)
  9.         time.sleep(0.5)

  10.     wb.save("车辆问题.xlsx")
复制代码
最佳答案
2020-8-13 13:36:35
jtxs0000 发表于 2020-8-13 11:58
我想放在一起,到时候好做数据分析

帮你写了一个

  1. import requests
  2. import parsel
  3. #from lxml import etree
  4. from openpyxl import load_workbook
  5. import time


  6. def main():
  7.     wb = load_workbook('test.xlsx')
  8.     wb.guess_types = True
  9.     ws = wb.active
  10.     ws.append(['投诉编号', '投诉品牌', '投诉车系', '投诉车型', '问题简述', '投诉时间', '投诉状态'])
  11.     headers = {'User-Agent': 'firefox'}
  12.     for page in range(1, 10):
  13.         target = f"http://www.12365auto.com/zlts/273-0-0-0-0-0_0-0-0-0-0-0-0-{page}.shtml"
  14.         print(target)
  15.         r = requests.get(target, headers=headers)
  16.         #html = etree.HTML(r.text)
  17.         html = parsel.Selector(r.text)
  18.         # 搜索编号
  19.         num = html.xpath('//tr/td[1]/text()')
  20.         # 公司名称
  21.         name = html.xpath('//tr/td[2]/text()')
  22.         # 车辆品牌
  23.         serial = html.xpath('//tr/td[3]/text()')
  24.         # 车辆款式
  25.         type = html.xpath('//tr/td[4]/text()')
  26.         # 问题信息
  27.         description = html.xpath('//tr/td/a/text()')
  28.         # 投诉时间
  29.         stime = html.xpath('//tr/td[7]/text()')
  30.         # 投诉状态
  31.         status = html.xpath('//tr/td/em/text()')
  32.         offset = ws.max_row + 1
  33.         for n, v in enumerate(num):
  34.             row = str(n + offset)
  35.             ws['a' + row] = num[n]
  36.             ws['b' + row] = name[n]
  37.             ws['c' + row] = serial[n]
  38.             ws['d' + row] = type[n]
  39.             ws['e' + row] = description[n]
  40.             ws['f' + row] = stime[n]
  41.             ws['g' + row] = status[n]
  42.     wb.save("test.xlsx")


  43. if __name__ == '__main__':
  44.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 10:48:58 | 显示全部楼层
麻烦发个完整代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-13 10:53:37 | 显示全部楼层
  1. import requests
  2. import parsel
  3. import openpyxl
  4. import time

  5. headers = {
  6.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400',
  7.     'Referer': 'https://image.baidu.com/'
  8. }

  9. for page in range(1,10):
  10.     target = f"http://www.12365auto.com/zlts/273-0-0-0-0-0_0-0-0-0-0-0-0-{page}.shtml"
  11.     print(target)  

  12.     response = requests.get(target,headers=headers).text
  13.     html = parsel.Selector(response)
  14.     # 搜索编号
  15.     num = html.xpath('//tr/td[1]/text()').getall()

  16.     # 公司名称
  17.     name = html.xpath('//tr/td[2]/text()').getall()

  18.     # 车辆品牌
  19.     car = html.xpath('//tr/td[3]/text()').getall()

  20.     # 车辆款式
  21.     cars = html.xpath('//tr/td[4]/text()').getall()

  22.     # 问题信息
  23.     carinfo = html.xpath('//tr/td/a/text()').getall()

  24.     # 投诉时间
  25.     timer = html.xpath('//tr/td[7]/text()').getall()

  26.     # 投诉状态
  27.     infos = html.xpath('//tr/td/em/text()').getall()
  28.     datalist = []

  29.     for i in range(len(num)):   
  30.         #创建一个新列表接受
  31.         data = []   
  32.         data.append(num[i])
  33.         
  34.         data.append(name[i])
  35.         
  36.         data.append(car[i])
  37.         
  38.         data.append(cars[i])

  39.         data.append(carinfo[i])

  40.         data.append(timer[i])

  41.         data.append(infos[i])

  42.         



  43.         #再次添加进一个列表
  44.         datalist.append(data)
  45.    
  46.         
  47.      
  48.     wb = openpyxl.Workbook()
  49.     wb.guess_types = True
  50.     ws = wb.active

  51.     ws.append(['投诉编号','投诉品牌','投诉车系','投诉车型','问题简述','投诉时间','投诉状态'])


  52.     for each in datalist:
  53.         print(each)
  54.         ws.append(each)
  55.         time.sleep(0.5)

  56.     wb.save("车辆问题.xlsx")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-13 10:54:51 | 显示全部楼层
  1. import requests
  2. import parsel
  3. import openpyxl
  4. import time

  5. headers = {
  6.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400',
  7.     'Referer': 'https://image.baidu.com/'
  8. }

  9. for page in range(1,10):
  10.     target = f"http://www.12365auto.com/zlts/273-0-0-0-0-0_0-0-0-0-0-0-0-{page}.shtml"
  11.     print(target)  

  12.     response = requests.get(target,headers=headers).text
  13.     html = parsel.Selector(response)
  14.     # 搜索编号
  15.     num = html.xpath('//tr/td[1]/text()').getall()

  16.     # 公司名称
  17.     name = html.xpath('//tr/td[2]/text()').getall()

  18.     # 车辆品牌
  19.     car = html.xpath('//tr/td[3]/text()').getall()

  20.     # 车辆款式
  21.     cars = html.xpath('//tr/td[4]/text()').getall()

  22.     # 问题信息
  23.     carinfo = html.xpath('//tr/td/a/text()').getall()

  24.     # 投诉时间
  25.     timer = html.xpath('//tr/td[7]/text()').getall()

  26.     # 投诉状态
  27.     infos = html.xpath('//tr/td/em/text()').getall()
  28.     datalist = []

  29.     for i in range(len(num)):   
  30.         #创建一个新列表接受
  31.         data = []   
  32.         data.append(num[i])
  33.         
  34.         data.append(name[i])
  35.         
  36.         data.append(car[i])
  37.         
  38.         data.append(cars[i])

  39.         data.append(carinfo[i])

  40.         data.append(timer[i])

  41.         data.append(infos[i])

  42.         



  43.         #再次添加进一个列表
  44.         datalist.append(data)
  45.    
  46.         
  47.      
  48.     wb = openpyxl.Workbook()
  49.     wb.guess_types = True
  50.     ws = wb.active

  51.     ws.append(['投诉编号','投诉品牌','投诉车系','投诉车型','问题简述','投诉时间','投诉状态'])


  52.     for each in datalist:
  53.         print(each)
  54.         ws.append(each)
  55.         time.sleep(0.5)

  56.     wb.save("车辆问题.xlsx")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-13 10:55:43 | 显示全部楼层

回复需要审核
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-13 10:56:46 | 显示全部楼层
  1. import requests
  2. import parsel
  3. import openpyxl
  4. import time

  5. headers = {
  6.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400',
  7.     'Referer': 'https://image.baidu.com/'
  8. }

  9. for page in range(1,10):
  10.     target = f"http://www.12365auto.com/zlts/273-0-0-0-0-0_0-0-0-0-0-0-0-{page}.shtml"
  11.     print(target)  

  12.     response = requests.get(target,headers=headers).text
  13.     html = parsel.Selector(response)
  14.     # 搜索编号
  15.     num = html.xpath('//tr/td[1]/text()').getall()

  16.     # 公司名称
  17.     name = html.xpath('//tr/td[2]/text()').getall()

  18.     # 车辆品牌
  19.     car = html.xpath('//tr/td[3]/text()').getall()

  20.     # 车辆款式
  21.     cars = html.xpath('//tr/td[4]/text()').getall()

  22.     # 问题信息
  23.     carinfo = html.xpath('//tr/td/a/text()').getall()

  24.     # 投诉时间
  25.     timer = html.xpath('//tr/td[7]/text()').getall()

  26.     # 投诉状态
  27.     infos = html.xpath('//tr/td/em/text()').getall()
  28.     datalist = []

  29.     for i in range(len(num)):   
  30.         #创建一个新列表接受
  31.         data = []   
  32.         data.append(num[i])
  33.         
  34.         data.append(name[i])
  35.         
  36.         data.append(car[i])
  37.         
  38.         data.append(cars[i])

  39.         data.append(carinfo[i])

  40.         data.append(timer[i])

  41.         data.append(infos[i])

  42.         



  43.         #再次添加进一个列表
  44.         datalist.append(data)
  45.    
  46.         
  47.      
  48.     wb = openpyxl.Workbook()
  49.     wb.guess_types = True
  50.     ws = wb.active

  51.     ws.append(['投诉编号','投诉品牌','投诉车系','投诉车型','问题简述','投诉时间','投诉状态'])


  52.     for each in datalist:
  53.         print(each)
  54.         ws.append(each)
  55.         time.sleep(0.5)

  56.     wb.save("车辆问题.xlsx")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-13 11:52:21 | 显示全部楼层
切页(用一个对象):
  1. ws = wb['Sheet1']
  2. # your code
  3. # switch to sheet2
  4. ws = wb['Sheet2']
复制代码


多页对象:
  1. ws1 = wb['Sheet1']
  2. ws2 = wb['Sheet2']
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-13 11:58:54 | 显示全部楼层
suchocolate 发表于 2020-8-13 11:52
切页(用一个对象):

我想放在一起,到时候好做数据分析
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-13 13:12:35 | 显示全部楼层
jtxs0000 发表于 2020-8-13 11:58
我想放在一起,到时候好做数据分析


你的标题容易引起歧义,我以为你是要openpyxl操作sheet翻页。
wb = Workbook()是新建excel表格,第二次使用保存就会把之前的文件覆盖掉,你要用这个:
  1. from openpyxl import load_workbook
  2. wb = load_workbook('test.xls')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-13 13:36:35 | 显示全部楼层    本楼为最佳答案   
jtxs0000 发表于 2020-8-13 11:58
我想放在一起,到时候好做数据分析

帮你写了一个

  1. import requests
  2. import parsel
  3. #from lxml import etree
  4. from openpyxl import load_workbook
  5. import time


  6. def main():
  7.     wb = load_workbook('test.xlsx')
  8.     wb.guess_types = True
  9.     ws = wb.active
  10.     ws.append(['投诉编号', '投诉品牌', '投诉车系', '投诉车型', '问题简述', '投诉时间', '投诉状态'])
  11.     headers = {'User-Agent': 'firefox'}
  12.     for page in range(1, 10):
  13.         target = f"http://www.12365auto.com/zlts/273-0-0-0-0-0_0-0-0-0-0-0-0-{page}.shtml"
  14.         print(target)
  15.         r = requests.get(target, headers=headers)
  16.         #html = etree.HTML(r.text)
  17.         html = parsel.Selector(r.text)
  18.         # 搜索编号
  19.         num = html.xpath('//tr/td[1]/text()')
  20.         # 公司名称
  21.         name = html.xpath('//tr/td[2]/text()')
  22.         # 车辆品牌
  23.         serial = html.xpath('//tr/td[3]/text()')
  24.         # 车辆款式
  25.         type = html.xpath('//tr/td[4]/text()')
  26.         # 问题信息
  27.         description = html.xpath('//tr/td/a/text()')
  28.         # 投诉时间
  29.         stime = html.xpath('//tr/td[7]/text()')
  30.         # 投诉状态
  31.         status = html.xpath('//tr/td/em/text()')
  32.         offset = ws.max_row + 1
  33.         for n, v in enumerate(num):
  34.             row = str(n + offset)
  35.             ws['a' + row] = num[n]
  36.             ws['b' + row] = name[n]
  37.             ws['c' + row] = serial[n]
  38.             ws['d' + row] = type[n]
  39.             ws['e' + row] = description[n]
  40.             ws['f' + row] = stime[n]
  41.             ws['g' + row] = status[n]
  42.     wb.save("test.xlsx")


  43. if __name__ == '__main__':
  44.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-14 11:51:44 | 显示全部楼层

抱歉,今天有点忙,没及时上来看,等我看看代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-14 12:10:44 | 显示全部楼层

谢谢,设最佳了,果然是我吧数据存储这块弄错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-25 15:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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