gunkpoke 2024-02-17 11:20 采纳率: 75%
浏览 1
已结题

python代码查询

请求帮助:为什么我的代码写完之后只输出了一个英雄的最低战力查询啊,谁能帮我看看我的代码哪里写错了呀

img

import csv
import requests
import re
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

hero_url = 'https://pvp.qq.com/web201605/herolist.shtml'
response = requests.get(url=hero_url, headers=headers)
response.encoding='gbk'
heros = re.findall('alt=".*?">(.*?)</a>',response.text)[0:93]
for hero in heros:
    print(hero)
    url = f'https://www.sapi.run/hero/select.php?hero={hero}&type=qq'
    res = requests.get(url)
    data = res.json()['data']
    name = data['name']
    area = data['area']
    areaPower= data['areaPower']
    city = data['city']
    cityPower = data['cityPower']
    province= data['province']
    provincePower = data['provincePower']
    platform= data['platform']
    updatetime = data['updatetime']
dit = {
    '英雄名称':name,
    '服务区':platform,
    '更新时间': updatetime,
    '铜牌区域':area,
    '铜牌分数': areaPower,
    '银牌区域':city,
    '银牌分数': cityPower,
    '金牌区域':province,
    '金牌分数':provincePower ,
}
f = open('最低战力.csv', mode='a', encoding='utf-8_sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['英雄名称', '服务区', '更新时间', '铜牌区域', '铜牌分数',
                                           '银牌区域', '银牌分数', '金牌区域','金牌分数'])
csv_writer.writeheader()
csv_writer.writerow(dit)



  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-02-17 11:23
    关注

    该回答引用自GPT-3.5,由博主GIS_Liu编写:

    问题描述分析:
    根据提供的代码和问题描述,你的代码的主要功能是从英雄列表网页中获取英雄名称,然后通过API查询每个英雄的最低战力信息,并将这些信息写入CSV文件中。但是你的代码只输出了一个英雄的最低战力查询结果,并且将结果写入了CSV文件。你希望修改代码,使其能够输出所有英雄的最低战力查询结果,并将所有结果写入CSV文件。

    解决方案:
    问题出在循环内部的文件写入部分,每次循环都会覆盖之前的结果。需要将文件写入的操作移到循环外部,这样就可以保存所有英雄的信息了。另外,还需要调整一些代码逻辑,确保每个英雄的查询结果都被处理和保存。

    以下是修改后的代码:

    import csv 
    import requests 
    import re 
    
    headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' }
    
    hero_url = 'https://pvp.qq.com/web201605/herolist.shtml' 
    response = requests.get(url=hero_url, headers=headers) 
    response.encoding='gbk' 
    heros = re.findall('alt=".*?">(.*?)</a>',response.text)[0:93]
    
    # 新建一个列表,用于保存所有英雄的信息
    hero_info_list = []
    
    for hero in heros: 
        url = f'https://www.sapi.run/hero/select.php?hero={hero}&type=qq' 
        res = requests.get(url) 
        data = res.json()['data'] 
        name = data['name'] 
        area = data['area'] 
        areaPower= data['areaPower'] 
        city = data['city'] 
        cityPower = data['cityPower'] 
        province= data['province'] 
        provincePower = data['provincePower'] 
        platform= data['platform'] 
        updatetime = data['updatetime'] 
        
        # 构建一个字典,保存当前英雄的信息
        hero_info = { 
            '英雄名称': name, 
            '服务区': platform, 
            '更新时间': updatetime, 
            '铜牌区域': area, 
            '铜牌分数': areaPower, 
            '银牌区域': city, 
            '银牌分数': cityPower, 
            '金牌区域': province, 
            '金牌分数': provincePower 
        } 
        
        # 将当前英雄的信息加入到列表中
        hero_info_list.append(hero_info)
    
    # 将所有英雄的信息写入CSV文件
    with open('最低战力.csv', mode='a', encoding='utf-8_sig', newline='') as f: 
        csv_writer = csv.DictWriter(f, fieldnames=['英雄名称', '服务区', '更新时间', '铜牌区域', '铜牌分数', '银牌区域', '银牌分数', '金牌区域','金牌分数']) 
        # 如果文件为空,先写入表头
        if f.tell() == 0:
            csv_writer.writeheader()
        # 写入所有英雄的信息
        csv_writer.writerows(hero_info_list)
    

    这个修改后的代码会首先获取所有英雄的信息,并保存在一个列表中,然后在循环结束后将所有英雄的信息一次性写入CSV文件。这样就可以保留所有英雄的信息了。

    img

    如果该回答解决了您的问题,请采纳!如果没有,请详述问题所在!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
  • ¥20 海思 nnie 编译 报错
  • ¥50 决策面并仿真,要求有仿真结果图
  • ¥15 关于路由器的路由协议配置
  • ¥15 springboot接入微信支付SDK
  • ¥50 大区域的遥感影像匹配 怎么做啊
  • ¥15 求解答:pytorch跑yolov8神经网络受挫