吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1224|回复: 8
收起左侧

[已解决] python 数据偏移?

[复制链接]
double07 发表于 2021-5-12 12:05
本帖最后由 double07 于 2021-5-12 23:36 编辑

想得到图片一的格式,但我这代码写出来格式,数据偏移了?
1.png
[Python] 纯文本查看 复制代码
import re

import pandas as pd
import requests

num = 0
url = 'https://sf-item.taobao.com/json/get_bid_records.htm?currentPage=1&id=641634330827&records_type=pageRecords'
headers = {
    'Referer': 'https://sf-item.taobao.com/sf_item/641634330827.htm?spm=a213w.7398504.paiList.1.52bd533aQrsYmj'
               '&track_id=2151e118-70ef-4958-bfe3-24d7937454ff'
}
data_lst = []
response = requests.get(url=url, headers=headers).text
status_lst = re.findall(r'status:(.*?),', response)  # 状态

for i in status_lst:
    lst = {}
    lst['索引'] = ''
    lst['状态'] = i
    data_lst.append(lst)

buyer_lst = re.findall(r'alias:"(.*?)"', response)  # 竞买人
for i in buyer_lst:
    lst = {}
    lst['竞买人'] = i
    data_lst.append(lst)

price_lst = re.findall(r'price:"(.*?)"', response)  # 价格
for i in price_lst:
    lst = {}
    lst['价格'] = i
    data_lst.append(lst)

time_lst = re.findall(r'date:"(.*?)"', response)  # 竞买时间
for i in price_lst:
    lst = {}
    lst['竞买时间'] = i
    data_lst.append(lst)
# print(data_lst)

df = pd.DataFrame(data_lst)
for i in df.index:
    df['索引'].at[i] = i + 1
df.to_excel('./end.xlsx', index=False)
num += 1
print('第%s条数据已保存' % num)
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

叫我小王叔叔 发表于 2021-5-12 13:30
本帖最后由 叫我小王叔叔 于 2021-5-12 13:51 编辑

改了一下,好像是可以了,你看看,你的逻辑不对,数据都不在一个维度里。
[Python] 纯文本查看 复制代码
import re

import pandas as pd
import requests

num = 0
url = 'https://sf-item.taobao.com/json/get_bid_records.htm?currentPage=1&id=641634330827&records_type=pageRecords'
headers = {
    'Referer': 'https://sf-item.taobao.com/sf_item/641634330827.htm?spm=a213w.7398504.paiList.1.52bd533aQrsYmj'
               '&track_id=2151e118-70ef-4958-bfe3-24d7937454ff'
}
data_lst = []
response = requests.get(url=url, headers=headers).text
status_lst = re.findall(r'status:(.*?),', response)  # 状态
buyer_lst = re.findall(r'alias:"(.*?)"', response)  # 竞买人
price_lst = re.findall(r'price:"(.*?)"', response)  # 价格
time_lst = re.findall(r'date:"(.*?)"', response)  # 竞买时间
data_lst=[]
for i in range(len(status_lst)):
    data=[status_lst[i-1],buyer_lst[i-1],price_lst[i-1],time_lst[i-1]]
    data_lst.append(data)

df = pd.DataFrame(data_lst)
df.columns = ["状态", "竞买人", "价格","竞买时间"]
df.to_excel('./end.xlsx', index=False)
print('活干完了')
头像被屏蔽
百千三昧 发表于 2021-5-12 12:45
咸鱼灭 发表于 2021-5-12 13:09
我个人喜欢用defaultdict来构造数据,楼主可以试试
 楼主| double07 发表于 2021-5-12 14:14
叫我小王叔叔 发表于 2021-5-12 13:30
改了一下,好像是可以了,你看看,你的逻辑不对,数据都不在一个维度里。
[mw_shl_code=python,true]impor ...

这思路非常好,学习受教
叫我小王叔叔 发表于 2021-5-12 14:19
double07 发表于 2021-5-12 14:14
这思路非常好,学习受教

共同学习,我也刚开始自学。
magicianly 发表于 2021-5-12 15:25
本帖最后由 magicianly 于 2021-5-12 15:28 编辑

不知道为啥,感觉你们写的好复杂啊,我也来写一个吧,你们处理JSON数据的方式有点单一哦

import demjson
import requests
import xlwt

def write_excel_xls(path, sheet_name, value, title=None, isno=None):
    """
    写Excel文件
    :param path: 文件存放地址
    :param sheet_name: 文档名称
    :param title: 文档头
    :param value: 一行的数据列表保存
    :param isno: 是否序号
    """
    count = 1
    index = len(value)  # 获取需要写入数据的行数
    workbook = xlwt.Workbook()  # 新建一个工作簿
    sheet = workbook.add_sheet(sheet_name)  # 在工作簿中新建一个表格
    if title:
        for t in range(len(title)):
            sheet.write(0, t, title[t])
    if isno:
        for i in range(0, index):
            sheet.write(i + 1, 0, count)
            for j in range(0, len(value[i])):
                sheet.write(i + 1, j + 1, value[i][j])  # 像表格中写入数据(对应的行和列)
            count += 1
    else:
        for i in range(0, index):
            for j in range(0, len(value[i])):
                sheet.write(i + 1, j, value[i][j])  # 像表格中写入数据(对应的行和列)
    workbook.save(path)  # 保存工作簿
    print("xls格式表格写入数据成功!")

url = 'https://sf-item.taobao.com/json/get_bid_records.htm?currentPage=1&id=641634330827&records_type=pageRecords'
r = requests.get(url)
datas = demjson.decode(r.text)
data_lst = list()
for data in datas.get('records'):
    status_lst = data.get('status')  # 状态
    buyer_lst = data.get('alias')  # 竞买人
    price_lst = data.get('price')  # 价格
    time_lst = data.get('date')  # 竞买时间
    data_lst.append([status_lst, buyer_lst, price_lst, time_lst])
title = ['状态', '竞买人', '价格', '竞买时间']
write_excel_xls('./1.xls', 'test', data_lst, isno=True, title=title)

微信图片_20210512152850.png
 楼主| double07 发表于 2021-5-12 21:04
magicianly 发表于 2021-5-12 15:25
不知道为啥,感觉你们写的好复杂啊,我也来写一个吧,你们处理JSON数据的方式有点单一哦
[md]```python

...

才开始学python,不会复杂的,结果为导向嘛,怎样简单怎样来,感谢大佬分享
magicianly 发表于 2021-5-13 09:27
double07 发表于 2021-5-12 21:04
才开始学python,不会复杂的,结果为导向嘛,怎样简单怎样来,感谢大佬分享

那个结果有点问题,如果是带序号,需要把TITLE写一个序号
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 02:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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