我正试图在Python的国际象棋网站上抓取一些游戏文件,但我遇到了一个问题。我的计划是从html中取出所有游戏ID并将其插入一些网址下载它们。困难的部分实际上是获得游戏ID。
相关的html看起来像这样:
<a class="games right-4" href="/livechess/game?id=1012106017"> View</a>
<a class="games right-4" href="/livechess/game?id=982464559"> View</a>
<a class="games right-4" href="/livechess/game?id=1011988271"> View</a>
我对id=...
部分感兴趣。此外,页面中的/livechess/...
不会出现其他事件。
如何使用正则表达式提取这些ID?我已经尝试过读一些东西,但这让我感到困惑,而不是帮助我。
答案 0 :(得分:2)
不要使用正则表达式来解析HTML。请改用HTML解析器。使用BeautifulSoup,此任务非常简单:
for link in soup.select('a[href^=/livechess/game?id=]'):
print link['href']
从中获取id可以通过字符串拆分完成:
link_id = link['href'].partition('id=')[-1]
使用实时页面进行演示:
>>> import requests
>>> from bs4 import BeautifulSoup
>>> r = requests.get('http://www.chess.com/members/view/MagnusCarlsen')
>>> soup = BeautifulSoup(r.content)
>>> for link in soup.select('a[href^=/livechess/game?id=]'):
... print link['href']
...
/livechess/game?id=998801933
/livechess/game?id=998801191
/livechess/game?id=998801076
/livechess/game?id=998801451
/livechess/game?id=998801336
/livechess/game?id=998801799
/livechess/game?id=998801568
/livechess/game?id=998800852
/livechess/game?id=998802049
/livechess/game?id=998800982
答案 1 :(得分:0)
正则表达式和BeautifulSoup的组合。
In [14]: for i in soup.find_all('a', href=re.compile("^/livechess/game\?id=")):
...: print(re.split(r'id=', i['href'])[1])
...:
998801933
998801191
998801076
998801451
998801336
998801799
998801568
998800852
998802049
998800982