2014-12-28 2 views
0

Я пытаюсь очистить некоторые файлы игры от шахматного сайта на Python, и у меня возникла проблема. Мой план состоит в том, чтобы снять все игровые идентификаторы из html и подключить их к некоторому URL-адресу, чтобы загрузить их. Жесткая часть на самом деле получает идентификаторы игры.Игра соскабливает регулярное выражение python

Соответствующий 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/... на странице.

Как извлечь эти идентификаторы с помощью регулярных выражений? Я пробовал читать кое-что, но это меня путает больше, чем помогает.

ответ

2

Не используйте регулярное выражение для анализа HTML. Вместо этого используйте парсер HTML. С BeautifulSoup эта задача столь же легко, как:

for link in soup.select('a[href^=/livechess/game?id=]'): 
    print link['href'] 

получать только идентификатор из этого можно сделать со строкой расщеплению:

link_id = link['href'].partition('id=')[-1] 

Demo с живой страницы:

>>> 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 
+0

Спасибо, Мартейн! Как бы я использовать BeautifulSoup, чтобы получить HTML-разметку? Первоначально я использовал URLLIB, чтобы открыть URL и читать HTML. – walela

+0

@walela: Я добавил демонстрацию, используя ['запросы'] (http://docs.python-requests.org/en/latest/). –

+0

@walela: также см. [Получение ссылок с веб-страницы с использованием питона и красивого супа] (http://stackoverflow.com/q/1080411) ([мой ответ там] (http://stackoverflow.com/a/22583436) охватывает BeautifulSoup 4). –

0

A сочетание регулярных выражений и 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 
Смежные вопросы