前言
好久不见了吧,博主最近也是成为了准高三,没有太多时间去创作文章了,所以这篇文章很有可能是高考前最后一篇文章了(也不一定😉)
言归正传,本次文章主要讲解如何去爬取原神官网的公告(我不玩原神!!!!)
开始
1.准备
- 好学的心
- httpx
2.寻找接口
首先我们来到原神官网,并按F12开启开发者工具
接着我们点击新闻,选择公告,在开发者工具中选择 Fetch/XHR
过滤请求
如果操作无误那么我们可以得到这个请求,也就是第二个请求
链接是这样的: https://content-static.mihoyo.com/content/ysCn/getContentList?pageSize=5&pageNum=1&channelId=12
这个就是我们要找到数据接口请求链接
接口参数详解
pageSize
:控制数据条数,比如我要请求前20条公告该参数值就为20,数据类型为int
pageNum
:控制数据页数,比如我要20条数据,但是我pageSize填3,那么该参数为2的时候返回的就是前4-6条公告,其他以此类推,数据类型为int
channelId
:博主暂时没有搞懂该参数含义,可能是某种标识,推测12代表公告,其他代表新闻这种意思
3.写代码
找到接口我们就应该开始写代码了,话不多说,上代码
import json
import httpx
with httpx.Client() as client:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
url = "https://content-static.mihoyo.com/content/ysCn/getContentList?pageSize=20&pageNum=1&channelId=12" # 这里以20条公告为例
data = client.get(url=url, headers=headers) # 请求公告数据
data = json.loads(data.text) # 将数据转换成字典
print(data)
运行程序,我们会得到下列返回结果
{'retcode': 0, 'message': '操作成功', 'data': {'total': 93, 'list': [{'contentId': '26400', 'channelId': ['12', '259'], 'title': '《原神》3.5版本「风花的呼吸」更新说明', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '720x320.png', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2023/02/28/c9ce9c6451451fa554ab74c2342d2c19_7924384204652977964.png'}]}], 'start_time': '2023-03-01 07:00:00', 'id': '26400'}, {'contentId': '26370', 'channelId': ['12', '259'], 'title': '《原神》「风花的呼吸」3.5版本更新维护预告', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '游戏内公告迭代-720-320安全区.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2023/02/27/48fe0090e4376a66b2f52007f8dc8e77_4916568639223877411.jpg'}]}], 'start_time': '2023-02-27 11:23:23', 'id': '26370'}, {'contentId': '25734', 'channelId': ['12'], 'title': '《原神》预下载已开启', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '720-320.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2023/01/16/adaca686a9d402cab8d822fa10732988_6944874481639867125.jpg'}]}], 'start_time': '2023-01-16 11:05:00', 'id': '25734'}, {'contentId': '25733', 'channelId': ['12'], 'title': '《原神》3.4版本「磬弦奏华夜」更新维护预告', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '690.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2023/01/16/7f341ba2332a05fba996d820334bdebb_2996032226775512164.jpg'}]}], 'start_time': '2023-01-16 10:29:13', 'id': '25733'}, {'contentId': '25037', 'channelId': ['12'], 'title': '《原神》3.3版本「六入尽明,诸相皆无」更新说明', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '720.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2022/12/07/5cc3065b6ef051d74479baf232831e35_7777248077405843881.jpg'}]}], 'start_time': '2022-12-07 09:33:08', 'id': '25037'}, {'contentId': '24955', 'channelId': ['12'], 'title': '《原神》3.3版本更新维护预告', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '游戏内公告迭代-720-320安全区.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2022/12/04/48fe0090e4376a66b2f52007f8dc8e77_3458819542487902745.jpg'}]}], 'start_time': '2022-12-05 10:30:00', 'id': '24955'}, {'contentId': '24436', 'channelId': ['12'], 'title': '《原神》「虚空鼓动,劫火高扬」3.2版本更新维护预告', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '游戏内公告迭代-720-320安全区.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2022/10/31/48fe0090e4376a66b2f52007f8dc8e77_2523267794398635617.jpg'}]}], 'start_time': '2022-10-31 11:38:43', 'id': '24436'}, {'contentId': '22749', 'channelId': ['11', '12'], 'title': '《原神》3.1版本「赤土之王与三朝圣者」更新说明', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-j简写', 'keyId': 1560152545989, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668058800, 'value': [{'name': '720x320-安全区600x280.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2022/09/27/3efa40b0e761d8f15fc640b7e12bfbf6_5749587768232257187.jpg'}]}, {'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}], 'start_time': '2022-09-28 07:00:00', 'id': '22749'}, {'contentId': '22714', 'channelId': ['11', '12'], 'title': '《原神》3.1版本「赤土之王与三朝圣者」更新维护预告', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-j简写', 'keyId': 1560152545989, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668058800, 'value': [{'name': '690-320.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2022/09/26/7f341ba2332a05fba996d820334bdebb_734662277370844096.jpg'}]}, {'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}], 'start_time': '2022-09-26 11:11:59', 'id': '22714'}, {'contentId': '22284', 'channelId': ['11', '12', '259'], 'title': '《原神》「千朵玫瑰带来的黎明」3.0版本更新维护预告', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': [{'name': '720-320.jpg', 'url': 'https://webstatic.mihoyo.com/upload/contentweb/2022/08/22/a926989766b3a74ae0a24917c7843b4d_6141685495939164846.jpg'}]}, {'arrtName': 'title-j简写', 'keyId': 1560152545989, 'value': ''}], 'start_time': '2022-08-22 11:44:38', 'id': '22284'}, {'contentId': '20165', 'channelId': ['12'], 'title': '《原神》2.5版本「薄樱初绽时」更新通知', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2022-02-16 07:00:00', 'id': '20165'}, {'contentId': '20020', 'channelId': ['12'], 'title': '《原神》2.5版本「薄樱初绽时」更新通知', 'author': '', 'type': '', 'tag': '', 'intro': '', 'url': '', 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2022-02-14 11:11:27', 'id': '20020'}, {'contentId': '19990', 'channelId': ['12', '259'], 'title': '「流光飞彩」海灯节答谢邮件发放问题处理说明', 'author': '', 'type': '', 'tag': '', 'intro': '', 'url': '', 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2022-02-09 01:25:00', 'id': '19990'}, {'contentId': '19560', 'channelId': ['12'], 'title': '《原神》2.4版本「飞彩镌流年」更新说明', 'author': '', 'type': '', 'tag': '', 'intro': '', 'url': '', 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2022-01-05 07:00:00', 'id': '19560'}, {'contentId': '19494', 'channelId': ['12'], 'title': '《原神》「飞彩镌流年」2.4版本更新通知', 'author': '', 'type': '', 'tag': '', 'intro': '', 'url': '', 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2021-12-31 10:30:00', 'id': '19494'}, {'contentId': '19427', 'channelId': ['12', '259'], 'title': '《原神》预下载即将开启', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2021-12-29 11:00:00', 'id': '19427'}, {'contentId': '18865', 'channelId': ['12'], 'title': '《原神》「皑尘与雪影」2.3版本更新说明', 'author': '', 'type': '', 'tag': '', 'intro': '', 'url': '', 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1637667366526, 'value': [{'name': '版更说明720-320.jpg', 'url': 'https://uploadstatic.mihoyo.com/contentweb/20211123/2021112319360636499.jpg'}]}], 'start_time': '2021-11-24 07:00:00', 'id': '18865'}, {'contentId': '18664', 'channelId': ['12'], 'title': '《原神》「皑尘与雪影」2.3版本更新通知', 'author': None, 'type': None, 'tag': None, 'intro': None, 'url': None, 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1637549422649, 'value': [{'name': '版本更新通知_690x320.jpg', 'url': 'https://uploadstatic.mihoyo.com/contentweb/20211122/2021112210502220085.jpg'}]}], 'start_time': '2021-11-22 10:47:33', 'id': '18664'}, {'contentId': '18075', 'channelId': ['12'], 'title': '《原神》「雾海悬谜境」2.2版本活动说明', 'author': '', 'type': '', 'tag': '', 'intro': '', 'url': '', 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2021-10-11 12:05:00', 'id': '18075'}, {'contentId': '18069', 'channelId': ['12'], 'title': '《原神》「雾海悬谜境」2.2版本更新通知', 'author': '', 'type': '', 'tag': '', 'intro': '', 'url': '', 'ext': [{'arrtName': 'title-简写', 'keyId': 1560152565522, 'value': ''}, {'arrtName': 'banner', 'keyId': 1591668079640, 'value': []}], 'start_time': '2021-10-11 10:33:36', 'id': '18069'}]}}
我们可以将json字符串格式化,然后观察其数据结构,下面是代码部分
import json
import httpx
with httpx.Client() as client:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
url = "https://content-static.mihoyo.com/content/ysCn/getContentList?pageSize=20&pageNum=1&channelId=12" # 这里以20条公告为例
data = client.get(url=url, headers=headers) # 请求公告数据
data = json.loads(data.text) # 将数据转换成字典
data = data['data']['list']
data_result = {} # 定义空字典,用作储存处理完毕的数据
for i in range(0, 20):
data_result.update({i: {"id": i + 1}})
data_result[i]["title"] = data[i]["title"]
try: # 防止链接为空
data_result[i]["img"] = data[i]["ext"][1]["value"][0]["url"] # 获取图片链接
except IndexError:
data_result[i]["img"] = None
data_result[i]["url"] = f"https://ys.mihoyo.com/main/news/detail/{data[i]['contentId']}"
print(data_result)
运行程序我们得到下列结果
{0: {'id': 1, 'title': '《原神》3.5版本「风花的呼吸」更新说明', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2023/02/28/c9ce9c6451451fa554ab74c2342d2c19_7924384204652977964.png', 'url': 'https://ys.mihoyo.com/main/news/detail/26400'}, 1: {'id': 2, 'title': '《原神》「风花的呼吸」3.5版本更新维护预告', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2023/02/27/48fe0090e4376a66b2f52007f8dc8e77_4916568639223877411.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/26370'}, 2: {'id': 3, 'title': '《原神》预下载已开启', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2023/01/16/adaca686a9d402cab8d822fa10732988_6944874481639867125.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/25734'}, 3: {'id': 4, 'title': '《原神》3.4版本「磬弦奏华夜」更新维护预告', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2023/01/16/7f341ba2332a05fba996d820334bdebb_2996032226775512164.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/25733'}, 4: {'id': 5, 'title': '《原神》3.3版本「六入尽明,诸相皆无」更新说明', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2022/12/07/5cc3065b6ef051d74479baf232831e35_7777248077405843881.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/25037'}, 5: {'id': 6, 'title': '《原神》3.3版本更新维护预告', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2022/12/04/48fe0090e4376a66b2f52007f8dc8e77_3458819542487902745.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/24955'}, 6: {'id': 7, 'title': '《原神》「虚空鼓动,劫火高扬」3.2版本更新维护预告', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2022/10/31/48fe0090e4376a66b2f52007f8dc8e77_2523267794398635617.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/24436'}, 7: {'id': 8, 'title': '《原神》3.1版本「赤土之王与三朝圣者」更新说明', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2022/09/27/3efa40b0e761d8f15fc640b7e12bfbf6_5749587768232257187.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/22749'}, 8: {'id': 9, 'title': '《原神》3.1版本「赤土之王与三朝圣者」更新维护预告', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2022/09/26/7f341ba2332a05fba996d820334bdebb_734662277370844096.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/22714'}, 9: {'id': 10, 'title': '《原神》「千朵玫瑰带来的黎明」3.0版本更新维护预告', 'img': 'https://webstatic.mihoyo.com/upload/contentweb/2022/08/22/a926989766b3a74ae0a24917c7843b4d_6141685495939164846.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/22284'}, 10: {'id': 11, 'title': '《原神》2.5版本「薄樱初绽时」更新通知', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/20165'}, 11: {'id': 12, 'title': '《原神》2.5版本「薄樱初绽时」更新通知', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/20020'}, 12: {'id': 13, 'title': '「流光飞彩」海灯节答谢邮件发放问题处理说明', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/19990'}, 13: {'id': 14, 'title': '《原神》2.4版本「飞彩镌流年」更新说明', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/19560'}, 14: {'id': 15, 'title': '《原神》「飞彩镌流年」2.4版本更新通知', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/19494'}, 15: {'id': 16, 'title': '《原神》预下载即将开启', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/19427'}, 16: {'id': 17, 'title': '《原神》「皑尘与雪影」2.3版本更新说明', 'img': 'https://uploadstatic.mihoyo.com/contentweb/20211123/2021112319360636499.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/18865'}, 17: {'id': 18, 'title': '《原神》「皑尘与雪影」2.3版本更新通知', 'img': 'https://uploadstatic.mihoyo.com/contentweb/20211122/2021112210502220085.jpg', 'url': 'https://ys.mihoyo.com/main/news/detail/18664'}, 18: {'id': 19, 'title': '《原神》「雾海悬谜境」2.2版本活动说明', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/18075'}, 19: {'id': 20, 'title': '《原神》「雾海悬谜境」2.2版本更新通知', 'img': None, 'url': 'https://ys.mihoyo.com/main/news/detail/18069'}}
尾声
至此,大家应该都学会了如何爬取官网公告数据了吧,如果你知道nonebot还可以整合拓展一下,实现qq查看原神公告,有机会我也会把源代码放给大家,那么感谢大家的阅读,我们下次再见