一日,见某好友发动态,偶露其 Steam 昵称,遂生欲加好友之念。但一向傲娇(社恐)的我怎么可能直接开口问steam好友代码?

尝试steam昵称搜索,发现默认steam好友搜索不支持精确搜索,只支持模糊搜索。搜索结果足足有3652个!而且每页只显示20个,手动找得累死。

方法:借助脚本实现爬取全部搜索结果,然后精确搜索字符串

1.首先拿到搜索引擎的api

在浏览器按F12打开开发者页面,点击“网络”选项页面,然后尝试手动下一页触发调用搜索引擎api

尝试手动调用这个api,发现这个api确实是返回了搜索结果,而且结果是一个json格式的文本,包含20个玩家账户的准确昵称和头像链接。可以确定这就是搜索引擎的api

2.写个py脚本调搜索引擎的api获取数据

一共需要爬取(3652÷20)183页的数据,

(不得不说,ai真是好用,查各种函数方法的效率真的快)

写测试脚本后运行发现报401 Client Error: Unauthorized for url 401未授权,才想起要在请求头加cookie

获取cookie:

最终代码

import requests
from time import sleep

def fetch_data(api_url, output_file, headers):
    try:
        response = requests.get(url=api_url, headers=headers)
        response.raise_for_status()
        with open(output_file, 'w', encoding='utf-8') as file:
            file.write(response.text)
        print(f"保存:{output_file}")
    except requests.exceptions.RequestException as err:
        print(f"错误信息:{err}")


for i in range(1, 183):
    api_url = "https://steamcommunity.com/search/SearchCommunityAjax?text=%E2%91%A8Cirno%E2%91%A8&filter=users&sessionid=789798798789789789&steamid_user=789789789789789789789&page=" + str(i)
    output_file = str(i) + ".txt"
    headers = {
        "Cookie": "browserid=789789789789789789; recentlyVisitedAppHubs=1144400; timezoneOffset=28800,0; sessionid=789789789789789789789789789; steamCountry=789789789789789789; steamLoginSecure=789789789789789789789789"
    }
    fetch_data(api_url, output_file, headers)
    sleep(1)

脚本正常获取api的数据

接下来就是直接找,嫌麻烦,我直接用vscode打开文件夹,用搜索查找字符串(vscode这个搜索也是真的棒,支持某个文件夹内所有文本文件搜索,而且还能在第一次搜索的基础上二次搜索,一堆文件里面找字符真是方便)

结果不多,对比一下id,再对比一下头像链接就找到了

枯死的灌木!