鱼C论坛

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

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

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

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

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

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


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

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


    for each in datalist:
        print(each)
        ws.append(each)
        time.sleep(0.5)

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

帮你写了一个
import requests
import parsel
#from lxml import etree
from openpyxl import load_workbook
import time


def main():
    wb = load_workbook('test.xlsx')
    wb.guess_types = True
    ws = wb.active
    ws.append(['投诉编号', '投诉品牌', '投诉车系', '投诉车型', '问题简述', '投诉时间', '投诉状态'])
    headers = {'User-Agent': 'firefox'}
    for page in range(1, 10):
        target = f"http://www.12365auto.com/zlts/273-0-0-0-0-0_0-0-0-0-0-0-0-{page}.shtml"
        print(target)
        r = requests.get(target, headers=headers)
        #html = etree.HTML(r.text)
        html = parsel.Selector(r.text)
        # 搜索编号
        num = html.xpath('//tr/td[1]/text()')
        # 公司名称
        name = html.xpath('//tr/td[2]/text()')
        # 车辆品牌
        serial = html.xpath('//tr/td[3]/text()')
        # 车辆款式
        type = html.xpath('//tr/td[4]/text()')
        # 问题信息
        description = html.xpath('//tr/td/a/text()')
        # 投诉时间
        stime = html.xpath('//tr/td[7]/text()')
        # 投诉状态
        status = html.xpath('//tr/td/em/text()')
        offset = ws.max_row + 1
        for n, v in enumerate(num):
            row = str(n + offset)
            ws['a' + row] = num[n]
            ws['b' + row] = name[n]
            ws['c' + row] = serial[n]
            ws['d' + row] = type[n]
            ws['e' + row] = description[n]
            ws['f' + row] = stime[n]
            ws['g' + row] = status[n]
    wb.save("test.xlsx")


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 10:48:58 | 显示全部楼层
麻烦发个完整代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

headers = {
    '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',
    'Referer': 'https://image.baidu.com/'
}

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

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

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

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

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

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

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

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

    for i in range(len(num)):   
        #创建一个新列表接受 
        data = []   
        data.append(num[i])
        
        data.append(name[i])
        
        data.append(car[i])
        
        data.append(cars[i])

        data.append(carinfo[i])

        data.append(timer[i])

        data.append(infos[i])

        



        #再次添加进一个列表
        datalist.append(data)
    
        
     
    wb = openpyxl.Workbook()
    wb.guess_types = True
    ws = wb.active

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


    for each in datalist:
        print(each)
        ws.append(each)
        time.sleep(0.5)

    wb.save("车辆问题.xlsx")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

headers = {
    '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',
    'Referer': 'https://image.baidu.com/'
}

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

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

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

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

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

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

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

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

    for i in range(len(num)):   
        #创建一个新列表接受 
        data = []   
        data.append(num[i])
        
        data.append(name[i])
        
        data.append(car[i])
        
        data.append(cars[i])

        data.append(carinfo[i])

        data.append(timer[i])

        data.append(infos[i])

        



        #再次添加进一个列表
        datalist.append(data)
    
        
     
    wb = openpyxl.Workbook()
    wb.guess_types = True
    ws = wb.active

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


    for each in datalist:
        print(each)
        ws.append(each)
        time.sleep(0.5)

    wb.save("车辆问题.xlsx")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回复需要审核
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

headers = {
    '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',
    'Referer': 'https://image.baidu.com/'
}

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

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

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

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

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

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

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

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

    for i in range(len(num)):   
        #创建一个新列表接受 
        data = []   
        data.append(num[i])
        
        data.append(name[i])
        
        data.append(car[i])
        
        data.append(cars[i])

        data.append(carinfo[i])

        data.append(timer[i])

        data.append(infos[i])

        



        #再次添加进一个列表
        datalist.append(data)
    
        
     
    wb = openpyxl.Workbook()
    wb.guess_types = True
    ws = wb.active

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


    for each in datalist:
        print(each)
        ws.append(each)
        time.sleep(0.5)

    wb.save("车辆问题.xlsx")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

多页对象:
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我想放在一起,到时候好做数据分析
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


你的标题容易引起歧义,我以为你是要openpyxl操作sheet翻页。
wb = Workbook()是新建excel表格,第二次使用保存就会把之前的文件覆盖掉,你要用这个:
from openpyxl import load_workbook
wb = load_workbook('test.xls')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

帮你写了一个
import requests
import parsel
#from lxml import etree
from openpyxl import load_workbook
import time


def main():
    wb = load_workbook('test.xlsx')
    wb.guess_types = True
    ws = wb.active
    ws.append(['投诉编号', '投诉品牌', '投诉车系', '投诉车型', '问题简述', '投诉时间', '投诉状态'])
    headers = {'User-Agent': 'firefox'}
    for page in range(1, 10):
        target = f"http://www.12365auto.com/zlts/273-0-0-0-0-0_0-0-0-0-0-0-0-{page}.shtml"
        print(target)
        r = requests.get(target, headers=headers)
        #html = etree.HTML(r.text)
        html = parsel.Selector(r.text)
        # 搜索编号
        num = html.xpath('//tr/td[1]/text()')
        # 公司名称
        name = html.xpath('//tr/td[2]/text()')
        # 车辆品牌
        serial = html.xpath('//tr/td[3]/text()')
        # 车辆款式
        type = html.xpath('//tr/td[4]/text()')
        # 问题信息
        description = html.xpath('//tr/td/a/text()')
        # 投诉时间
        stime = html.xpath('//tr/td[7]/text()')
        # 投诉状态
        status = html.xpath('//tr/td/em/text()')
        offset = ws.max_row + 1
        for n, v in enumerate(num):
            row = str(n + offset)
            ws['a' + row] = num[n]
            ws['b' + row] = name[n]
            ws['c' + row] = serial[n]
            ws['d' + row] = type[n]
            ws['e' + row] = description[n]
            ws['f' + row] = stime[n]
            ws['g' + row] = status[n]
    wb.save("test.xlsx")


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

抱歉,今天有点忙,没及时上来看,等我看看代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,设最佳了,果然是我吧数据存储这块弄错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 11:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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