我有一个字符串,我需要从末尾(从开头到 *)获取某个段
Stockfish level 5 - Anon. • lichess.orgAccessibility: Enable blind mode
lichess.orgPlaylichess.orgCreate a gameArena tournamentsSwiss tournamentsSimultaneous exhibitionsPuzzlesPuzzlesPuzzle DashboardPuzzle StreakPuzzle StormPuzzle RacerLearnChess basicsPracticeCoordinatesStudyCoachesWatchLichess TVCurrent gamesStreamersBroadcastsVideo libraryCommunityPlayersTeamsForumBlogToolsAnalysis boardOpening explorerBoard editorImport gameAdvanced search
Sign in∞ • Casual • Correspondence 20 minutes agoStockfish level 5AnonymousCorrespondence Chess • Stockfish level 5 vs Anon.Stockfish level 5 plays Anon. in a casual Correspondence game of chess. Game is still being played after 1 moves. Click to replay, analyse, and discuss the game![Event "Casual Correspondence game"]
[Site "https://lichess.org/dtkxPuQf"]
[Date "2023.01.02"]
[White "lichess AI level 5"]
[Black "Anonymous"]
[Result "*"]
[UTCDate "2023.01.02"]
[UTCTime "12:43:13"]
[WhiteElo "?"]
[BlackElo "?"]
[Variant "Standard"]
[TimeControl "-"]
[ECO "B00"]
[Opening "King's Pawn"]
[Termination "Unterminated"]
1. e4 *Reconnecting
输出:1. e4
我尝试了text[text.find('1. '):].partition("*")[0]
,但有时它输出“]”而不是所需的值
我需要从游戏中获得时间感的移动并通知我新的移动
1条答案
按热度按时间xdyibdwo1#
不是从Lichess网页(https://lichess.org/dtkxPuQf)检索特定游戏的HTML,然后解析文本表示以提取移动,而是更容易为此使用Lichess API Package 器。
比较以下两种溶液。
将网页解析为文本内容
像上一个问题/答案中那样使用
requests
和bs4
:您的应答尝试为:
现在您遇到了
text[soup.text.find('1. '):].partition("*")[0]
的问题。为Lichess API使用 Package 器
类似问题请参见my answer:
使用
pip install python-lichess
安装 Package 器,然后获取game-ID'dtkxPuQf'
指定的给定game
的移动:图纸:
第一个移动是第一个元素
game['moves'].split()[0]
(这里是e4
),最后一个移动是game['moves'].split()[-1]
(这里是f5
)。轮询更新
一个循环可以轮询API的游戏资源,并与保存的
game
对象(dict)进行比较。要检测在此期间是否发生了更新,我们只需检查以下3项:game['lastMoveAt']
:如果时间戳未更改,则为最新。game['status']
:如果有人辞职,那么它将发生变化-没有任何进一步的移动发生。game['moves']
:这里的区别是同时附加的移动。所以我们需要两个变量来比较博弈状态x一米十四氮一x和x一米十五氮一x。
使用各种策略对所有请求进行速率限制,以确保API对每个人都保持响应。一次只能发出一个请求。如果收到状态为429的HTTP响应,请等待一整分钟,然后再继续使用API。
因此,您应该使用适当的轮询间隔,以便在请求之间有足够长的延迟。
另请参见