一日,见某好友发动态,偶露其 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,再对比一下头像链接就找到了