效果展示:

分析目标网站:

  1. LOL道聚城网址:https://daoju.qq.com/lol/list/17-0-0-0-0-0-0-0-0-0-0-00-0-0-1-1.shtml
  2. 在进入网站后,右键网站任意位置点击查看页面源代码,但在源代码中无法找到皮肤相关信息

  1. 返回网站,右键点检查审查元素,在弹出的控制台中点网络network,如果没有显示数据的话,刷新一下网页就有了

  1. 在网络栏下找到GoodsListApp.php?.....开头的那个名称,然后点击右侧的预览,展开数据后发现其皮肤数据都在里面

  1. 在确认数据的所在位置后,点击负载查看其发送请求时,需要携带的全部参数

获取皮肤相关信息:

  1. 创建请求头,并分析所有需要携带的参数:

    • 打开网站不同页码,对这些参数进行对比,可以发现参数:
    • page:不同页面对应的页码数,整型
    • _:一个13位的时间戳,整型
    • 而其他参数则都相同
# 请求链接
self.url = "https://apps.game.qq.com/daoju/v3/api/hx/goods/app/v71/GoodsListApp.php?"
# 请求头
self.headers = {"referer": "https://daoju.qq.com/","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36 Edg/101.0.1210.32"
}
# 发送请求需要携带的参数
self.params = {"view": "biz_cate","page": int,"pageSize": 16,"orderby": "dtShowBegin","ordertype": "desc","cate": 17,"appSource": "pc","plat": 1,"output_format": "jsonp","biz": "lol","_": int(time.time() * 1000)
}
  1. 找到参数的规律后,发送请求,并解析请求返回的数据,这里使用re正则表达式进行筛选
def get_data(self):# 初始化字典all_skins_data = dict()# 循环请求页面for i in range(1, 51):# 请求间隔time.sleep(1)# 参数页码self.params['page'] = i# 发送请求res = requests.get(self.url, headers=self.headers, params=self.params)# 提取数据skins_list = self.data_format(res.text)# 添加进字典all_skins_data[f"lol道具城第<{i}>页"] = skins_list# 保存数据self.save_data(all_skins_data)def data_format(self, data):# 筛选当页所有皮肤名称skin_name_list = re.findall(r'"propName":"(.*?)"', data)# 筛选当页所有皮肤价格skin_price_list = re.findall(r'"iDqPrice":"(\d+)"', data)# 筛选当页所有上架日期skin_date_list = re.findall(r'"dtBegin":"(.*?)"', data)skins_list = []for i in range(0, len(skin_name_list)):item = dict()# 皮肤名称item["skin_name"] = str(skin_name_list[i]).encode('utf8').decode('unicode_escape').replace("\\", "")# 皮肤价格(点券)item["skin_price"] = skin_price_list[i]# 皮肤上架日期item["skin_date"] = skin_date_list[i]skins_list.append(item)# 展示数据print(item)return skins_list
  1. 把筛选后的数据保存到本地,这里采用json格式:
    def save_data(self, all_skins_data):# JSON序列化json_data = json.dumps(all_skins_data, indent=1, ensure_ascii=False)with open("lol_skins_data.json", "w", encoding="utf-8") as w:w.write(json_data)

完整版代码:

  • 这个是我平时做爬虫练习时,汇总的案例的其中之一,代码比较适合新手学习,该Github仓库的爬虫案例也会在以后不断更新,有兴趣学习爬虫的可以来捧捧场哦QwQ。仓库链接:https://github.com/cjladmin/spider_cases
import requests
import time
import re
import jsonclass LolSkins:def __init__(self):self.url = "https://apps.game.qq.com/daoju/v3/api/hx/goods/app/v71/GoodsListApp.php?"self.headers = {"referer": "https://daoju.qq.com/","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36 Edg/101.0.1210.32"}self.params = {"view": "biz_cate","page": int,"pageSize": 16,"orderby": "dtShowBegin","ordertype": "desc","cate": 17,"appSource": "pc","plat": 1,"output_format": "jsonp","biz": "lol","_": int(time.time() * 1000)}def get_data(self):# 初始化字典all_skins_data = dict()# 循环请求页面for i in range(1, 51):# 请求间隔time.sleep(1)# 参数页码self.params['page'] = i# 发送请求res = requests.get(self.url, headers=self.headers, params=self.params)# 提取数据skins_list = self.data_format(res.text)# 添加进字典all_skins_data[f"lol道聚城第<{i}>页"] = skins_list# 保存数据self.save_data(all_skins_data)def data_format(self, data):# 皮肤名称skin_name_list = re.findall(r'"propName":"(.*?)"', data)# 皮肤价格skin_price_list = re.findall(r'"iDqPrice":"(\d+)"', data)# 上架日期skin_date_list = re.findall(r'"dtBegin":"(.*?)"', data)skins_list = []for i in range(0, len(skin_name_list)):item = dict()item["skin_name"] = str(skin_name_list[i]).encode('utf8').decode('unicode_escape').replace("\\", "")item["skin_price"] = skin_price_list[i]item["skin_date"] = skin_date_list[i]skins_list.append(item)# 展示数据print(item)return skins_listdef save_data(self, all_skins_data):# JSON序列化json_data = json.dumps(all_skins_data, indent=1, ensure_ascii=False)with open("lol_skins_data.json", "w", encoding="utf-8") as w:w.write(json_data)if __name__ == '__main__':lol = LolSkins()lol.get_data()

获取LOL所有在售皮肤的价格和发布日期相关推荐

  1. 爬虫获取王者荣耀全英雄皮肤

    爬虫获取王者荣耀全英雄皮肤 # coding=utf-8import os,requests,shutil""" 王者荣耀全英雄皮肤 """ ...

  2. Web网页自动化实战《4.获取所有酒店的名字、价格、评分信息,并写入文件》上篇...

    目录 一.find_elements()的作用 1.获取当前页面中所有酒店名称的元素 2.获取当前页面中所有酒店价格的元素 3.获取当前页面中所有酒店评分的元素 二.分别拿到每家的价格.评分.酒店名并 ...

  3. Web网页自动化实战《4.获取所有酒店的名字、价格、评分信息,并写入文件》上篇

    一.find_elements()的作用 1.获取当前页面中所有酒店名称的元素 通过元素的class属性获取酒店名,获取到了20个 这20个酒店展示的格式都是一样的.每个div都是独立的.每个div都 ...

  4. linux中用shell获取昨天、明天或多天前的日期

    linux中用shell获取昨天.明天或多天前的日期时间 2015-12-08 09:33:00 BlogJava-专家区 原文 http://www.blogjava.net/xzclog/arch ...

  5. hive:函数:日期比较函数:获取当前日期 + date_add + date_sub函数获取前几天或后几天的日期

    获取当前日期: 方式1: select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') curr_date; 返回: 2020-09-17 ...

  6. 获取自然月之前或者自然月之后的日期

    1.获取n个月之前 /*** @author: yaoxueke* @description: 获取几个月前的日* @param date 日期* @param num 几个月* @return {* ...

  7. js获取7天前,n天前的日期,7天后,n天后的日期,获取当前日期是周几

    前言: 1. js获取7天前,n天前的日期,7天后,n天后的日期,      2.获取当前日期是周几 js方法: 1.获取指定日期,传参数进去,传的是正值,则是今天之后的日期.传的负值则是今天之前的日 ...

  8. iPhone 13 发布日期、规格、预期价格等信息超全汇总

    iPhone 13 的发布指日可待,关于iPhone13你都有哪些想要了解的呢?macw为大家带来各种信息汇总,iPhone13发布日期.规格.价格等,你想了解的这儿都有! iPhone 13 发布日 ...

  9. Windows 12:发布日期、新功能、价格、硬件要求

    距离Windows 11首次发布仅一年时间,但关于 Windows 12 的传言已经开始四处流传.有报道称,微软正计划切换到Windows 的新更新周期,未来几个月将不会发布 Windows 11 2 ...

  10. 根据年份获取所有周次及每周的开始-结束日期

    封装数据的实体类 @Data public class DateRange {// 周数private int week;// 当前周开始日期private Date startDate;// 当前周 ...

最新文章

  1. python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解
  2. 数字图像处理实验(13):PROJECT 05-04,Parametric Wiener Filter
  3. Spring AOP相关术语解释及简单使用
  4. vue商城项目开发:浏览器自动访问、路由样式修改及定义和导入组件
  5. 益生菌可能导致的“菌血症”与死亡(调研手稿六)
  6. 单片机串行通信全解析
  7. POJ 1189 钉子和小球
  8. setseed_Java Random setSeed()方法与示例
  9. mysql8.0.11创建用户报错_mysql8.0创建用户授予权限报错解决方法
  10. Varnish的基本应用详解
  11. 文献解读:结构方程模型SEM基础,小白看这个就基本够了
  12. 软件质量保证管理办法
  13. html英文期刊参考文献,英文参考文献标准格式
  14. NOIP模拟赛 魔方
  15. 可以这样理解 TIM_INIT(arr,psc)重装载值和分频值
  16. app端-留存分析-周留存率报表开发
  17. php删除双引号,php如何去除引号
  18. codeblock的c语言编译,CodeBlocks无法编译的原因和解决办法
  19. 接受密码和用户名,若用户名为‘admin‘,密码为‘‘123456‘则显示用户登录成功,否则一直登录
  20. Echarts实现省级到市级地图下钻

热门文章

  1. 《自控力》读书笔记思维导图
  2. 通过exchangelib库连接到公司exchange邮箱
  3. Androidstudio之菜单栏设置
  4. 关于matlab 画水平线
  5. physx: pid balance controll
  6. vue3 + router-view + keepalive parentComponent.ctx.deactivate is not a function
  7. QT学习教程(全面)
  8. nowcoder contest#115 江西财经大学第一届程序设计竞赛 G 小Q的口袋校园 记忆化搜索 DP
  9. CobaltStrike逆向学习系列(15):CS功能分析-BOF
  10. mapgis明码文件转为点线面文件_MapGIS明码文件的获得和在坐标转化中的应用研究(2)...