游戏刮python正则表达式

时间:2014-12-28 12:19:19

标签: python regex web-scraping

我正试图在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?我已经尝试过读一些东西,但这让我感到困惑,而不是帮助我。

2 个答案:

答案 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