ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 361|回复: 0

[已解决] LOL战绩

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-10 19:16 | 显示全部楼层 |阅读模式
本帖最后由 Stone_00x 于 2024-4-13 17:25 编辑



我想根据ID爬取LOL对应的皮肤数量跟最后战绩,但是爬不到数据,路过的大婶帮忙看下
网址:https://fa8.pw/
  1. import requests
  2. import json
  3. import pandas as pd
  4. from datetime import datetime
  5. import winreg,sys
  6. from fake_useragent import UserAgent


  7. key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
  8.                      r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
  9. deskPath = winreg.QueryValueEx(key, "Desktop")[0]

  10. url_id = "https://luck.92.edri.mobi/shop/shop/getAccount"
  11. myheaders = {
  12.     "User-Agent": UserAgent().random
  13. }


  14. data_list = []
  15. lastpage = 0
  16. allowed_regions = ["卡拉曼达","暗影岛","征服之海","诺克萨斯","战争学院","雷瑟守备","艾欧尼亚","黑色玫瑰"]
  17. dic_goods={"67310":"1807","67311":"1808","67320":"1817","67328":"1825","67321":"1818","67327":"1824","67313":"1810","67316":"1813","67318":"1815"}
  18. # dic_goods={"67305":"1802"}#皮肤

  19. for agent_goodsid,goodsid in dic_goods.items():
  20.   #获取每个区的总页数
  21.     mydata = {"agent_goodsid" : agent_goodsid , "goodsid": goodsid, "page": "1", "userid": "959", "type": "new"}
  22.     html = requests.post(url_id, headers=myheaders, data=mydata).text
  23.     page = -(-json.loads(html)['count']//10)
  24.    
  25.     if page==0:
  26.         continue     
  27.     else:
  28.         daqu=json.loads(html)['data'][0]['number']['2']
  29.         print(f"{daqu},page:{page}")   
  30.    
  31.     for page_num in range(page):
  32.         try:
  33.             mydata = {"agent_goodsid" : agent_goodsid , "goodsid": goodsid, "page": page_num + 1, "userid": "959", "type": "new"}
  34.             html = requests.post(url_id, headers=myheaders, data=mydata).text
  35.             text = json.loads(html)['data']

  36.             if len(text) > 0:
  37.                 lastpage += 1

  38.                 for item in text:
  39.                     area = item['number']['2']
  40.                     name = item['number']['3']
  41.                     detail = item['number']['4']
  42.                     detail=detail.replace('|','----')

  43.                     if area not in allowed_regions:
  44.                         continue  # Skip if region not in allowed list               

  45.                     lst1 = [i for i in detail.split('----')]
  46.                     if not "英雄:" in lst1[2]:
  47.                         lst1[2] = "英雄:" + lst1[2]
  48.                     lst = [i.split(':') for i in lst1 if ":" in i]

  49.                     data_dict = {"大区": area, "ID": name, **{item[0]: item[1] for item in lst}}
  50.                     data_dict['页码'] = page_num + 1  # 添加页码字段
  51.                     data_list.append(data_dict)
  52.         except Exception as e:
  53.             print(f"Error occurred: {e}")
  54.             continue  # Continue to the next iteration if an error occurs

  55. df = pd.DataFrame(data_list)

  56. if df.empty:
  57.     print("没有数据,程序退出。")
  58.     sys.exit()

  59. numeric_columns = [column for column in df.columns]
  60. df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric, errors='ignore')
  61. df = df[df['皮肤'] > 400]


  62. if '最后游戏' in df.columns:
  63.     df = df[df.columns].sort_values(by=["皮肤","最后游戏", "等级"], ascending=[False,True, True])
  64. else:
  65.     df = df[df.columns].sort_values(by=["皮肤", "等级"], ascending=[False, True])

  66. columns = ["页码", "大区", "ID", "等级", "英雄", "皮肤", "单", "组"]
  67. df=df[columns]
  68.    
  69. exl_name = "EZ__PF" if goodsid == "1802" else "EZ"

  70. current_time = datetime.now().strftime("%m%d__%H.%M")
  71. with pd.ExcelWriter(f"{deskPath}\\{exl_name}__{current_time}.xlsx", engine='xlsxwriter') as writer:
  72.     df.to_excel(writer, index=False, sheet_name='Sheet1')

  73. print(f"共{lastpage}页,数据已保存到桌面。")
  74. import winsound
  75. winsound.Beep(440,1000)
复制代码
  1. import os
  2. import sys
  3. import tkinter as tk
  4. from tkinter import filedialog
  5. from datetime import datetime
  6. import requests
  7. import json
  8. import pandas as pd
  9. import hashlib
  10. from fake_useragent import UserAgent
  11. import re

  12. def md5_hash(text):
  13.     md5 = hashlib.md5()
  14.     md5.update(text.encode('utf-8'))
  15.     encrypted_text = md5.hexdigest()
  16.     return encrypted_text

  17. url_cx = "https://fa8.pw/api/api.php?act=cx"
  18. head_cx = {
  19.     "User-Agent": UserAgent().random,
  20.     "Cookie": "__51vcke__KEAGaASdi4vVsbMk=1efc3001-fb11-50f9-9147-77f4f6eb3599; __51vuft__KEAGaASdi4vVsbMk=1712214416217; sign=8b8db337e75948fe5bb408040a5d9618; __51uvsct__KEAGaASdi4vVsbMk=15; swl=true; __vtins__KEAGaASdi4vVsbMk=%7B%22sid%22%3A%20%227009469d-4a54-519c-bd22-7eb46204f9e8%22%2C%20%22vd%22%3A%203%2C%20%22stt%22%3A%20199586%2C%20%22dr%22%3A%203335%2C%20%22expires%22%3A%201712976322096%2C%20%22ct%22%3A%201712974522096%7D",
  21.     "Referer": "https://fa8.pw/"
  22. }

  23. dic_dq = {
  24.     '艾欧尼亚': '1',
  25.     '比尔吉沃特': '2',
  26.     '祖安': '3',
  27.     '诺克萨斯': '4',
  28.     '德玛西亚': '6',
  29.     '班德尔城': '5',
  30.     '皮尔特沃夫': '7',
  31.     '战争学院': '8',
  32.     '弗雷尔卓德': '9',
  33.     '巨神峰': '10',
  34.     '雷瑟守备': '11',
  35.     '无畏先锋': '12',
  36.     '裁决之地': '13',
  37.     '黑色玫瑰': '14',
  38.     '暗影岛': '15',
  39.     '钢铁烈阳': '17',
  40.     '恕瑞玛': '16',
  41.     '水晶之痕': '18',
  42.     '影流': '22',
  43.     '守望之海': '23',
  44.     '扭曲丛林': '20',
  45.     '征服之海': '24',
  46.     '卡拉曼达': '25',
  47.     '皮城警备': '27',
  48.     '巨龙之巢': '26',
  49.     '均衡教派': '19',
  50.     '男爵领域': '30',
  51.     '峡谷之巅': '31'
  52. }

  53. # 创建tkinter应用程序
  54. root = tk.Tk()
  55. root.withdraw()  # 隐藏tkinter主窗口

  56. # 获取桌面路径
  57. desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')

  58. # 打开文件选择对话框,默认选择桌面路径
  59. file_path = filedialog.askopenfilename(initialdir=desktop_path)
  60. root.destroy()

  61. if file_path == "":
  62.     sys.exit()

  63. df = pd.DataFrame(columns=["页码", "大区", "ID", "等级", "英雄", "皮肤", "单", "组", "最后游戏"])
  64. df1 = pd.read_excel(file_path)

  65. with pd.ExcelWriter(file_path) as writer:
  66.     # 将原始数据保存在Excel文件的第二张表中
  67.     df1.to_excel(writer, sheet_name='原始数据', index=False)

  68.     # 处理数据并保存在第一张表中
  69.     pattern = r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}'
  70.     for index, row in df1.iterrows():
  71.         my_skin = row["皮肤"]
  72.         if my_skin < 450:
  73.             continue
  74.         mydq = row["大区"]
  75.         mydq_num = dic_dq.get(row["大区"], "")  # 获取大区名称对应的编号,如果找不到,默认为空字符串
  76.         myname = row["ID"]
  77.         mysc = md5_hash(f"name={myname}dq-{mydq_num}")

  78.         mydata = {
  79.             "name": myname,
  80.             "dq": mydq_num,
  81.             "start": "0",
  82.             "end": "10",
  83.             "type": "lol",
  84.             "tag": "1",
  85.             "sc": mysc
  86.         }

  87.         html = requests.post(url_cx, data=mydata, headers=head_cx)
  88.         data = json.loads(html.text)

  89.         if data['zhanji'] is None:
  90.             continue
  91.         
  92.         if '过期' in data['zhanji']:
  93.             print("已过免费查询时间段,程序退出。")
  94.             sys.exit()            
  95.         
  96.         if '没有' in data['zhanji']:
  97.             continue

  98.         # 正则匹配战绩中的第一个时间
  99.         match = re.search(pattern, data['zhanji'])[0]

  100.         skin_count = int(data['skin'].split("|")[1].split("</font>")[0].split("皮 肤:")[1])  # 皮肤数量
  101.         last_match = data['lastGameDate']  # 最后一场战绩
  102.         ds = data['dsdj']  # 单双排
  103.         zp = data['lhdj']  # 组排

  104.         # 在这里对应DataFrame的行索引与循环中的index值
  105.         df.at[index, '皮肤'] = skin_count
  106.         df.at[index, '单'] = ds
  107.         df.at[index, '组'] = zp
  108.         df.at[index, '最后游戏'] = match

  109.     # 将其他字段也放在循环外面,避免重复赋值
  110.     df["页码"] = df1["页码"]
  111.     df["大区"] = df1["大区"]
  112.     df["ID"] = df1["ID"]
  113.     df["等级"] = df1["等级"]
  114.     df["英雄"] = df1["英雄"]

  115.     if df.empty:
  116.         print("没有数据,程序退出。")
  117.         sys.exit()

  118.     df = df[df['皮肤'] > 400]
  119.     df['最后游戏'] = df['最后游戏'].fillna('').str.slice(0, 10)
  120.     df['最后游戏'] = df['最后游戏'].str.replace('-', '/')
  121.     df.to_excel(writer, sheet_name='处理后数据', index=False)

  122. import winsound

  123. winsound.Beep(440, 1000)

复制代码
  1. // 定义一个函数,用于连续点击链接元素
  2. function clickLinkMultipleTimesWithDelay(numClicks, delay) {
  3.     // 获取链接元素
  4.     var linkElement = document.getElementById('getE');
  5.    
  6.     // 如果链接元素存在,则执行点击操作
  7.     if (linkElement) {
  8.         var i = 0;
  9.         function clickNext() {
  10.             if (i < numClicks) {
  11.                 linkElement.click(); // 模拟点击链接元素
  12.                 i++;
  13.                 setTimeout(clickNext, delay); // 设置延迟后继续点击
  14.             }
  15.         }
  16.         clickNext();
  17.     } else {
  18.         console.log('找不到链接元素。');
  19.     }
  20. }

  21. // 调用函数,点击链接元素10次,每次点击间隔100毫秒(0.1秒)
  22. clickLinkMultipleTimesWithDelay(10, 100);
复制代码

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 20:03 , Processed in 0.031280 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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