2016-05-26 5 views
1

https://en.wikipedia.org/wiki/List_of_largest_companies_by_revenueвыражения Python Regex для разбора HTML-документа

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

Пример моей проблемы:

Я хотел бы, чтобы соответствовать "Wal-Mart Stores Inc." а затем «Sinopec Group» и так далее.

<td><a href="/wiki/Wal-Mart_Stores,_Inc." title="Wal-Mart Stores, Inc."class="mw-redirect">Wal-Mart Stores, Inc.</a></td> 

... далее в документе ...

<td style="background: #ffffcc;"><a href="/wiki/Sinopec_Group" title="Sinopec Group" class="mw-redirect">Sinopec Group</a></td> 

Спасибо заранее.

+0

первый, вероятно, вы не хотите, регулярное выражение. Во-вторых, похоже, что все они привязаны к классу 'mw-redirect' ... Что-то вроде' BeautifulSoup' должно быть в состоянии выбирать элементы на основе этого ... – mgilson

+0

Я понимаю, что я должен использовать 'BeautifulSoup', хотя Я должен использовать регулярное выражение. –

+0

Почему бы вам не использовать необработанные данные? –

ответ

0

Это можно легко сделать с beautifulsoup

from bs4 import BeautifulSoup as soup 

x = ['<td><a href="/wiki/Wal-Mart_Stores,_Inc." title="Wal-Mart Stores, Inc."class="mw-redirect">Wal-Mart Stores, Inc.</a></td>', '<td style="background: #ffffcc;"><a href="/wiki/Sinopec_Group" title="Sinopec Group" class="mw-redirect">Sinopec Group</a></td>'] 
tmp = [soup(y).find('td').find('a') for y in x] 
lst = [x['title'].strip() for x in tmp if x.has_attr('title')] 
print(lst) 

, если его одной строки, то вы можете использовать

x = '''<td><a href="/wiki/Wal-Mart_Stores,_Inc." title="Wal-Mart Stores, Inc."class="mw-redirect">Wal-Mart Stores, Inc.</a></td> <td style="background: #ffffcc;"><a href="/wiki/Sinopec_Group" title="Sinopec Group" class="mw-redirect">Sinopec Group</a></td>''' 
tmp = [y.find('a') for y in soup(x).find_all('td')] 
lst = [x['title'].strip() for x in tmp if x.has_attr('title')] 
print(lst) 

Если вы все еще хотите использовать регулярное выражение , затем

<td.*?<a.*? title\s*=\s*"([^"]+).*?</td> 

ПРИМЕЧАНИЕ: - Матч в первой группе захвата

Regex Demo

0

Сгруппировать содержимое атрибута title в тегах a. Он проверяет, является ли это первой ячейкой таблицы после рейтинга.

regex = /th>\n<td.*?><a .* ?title="(.*?)".*>/ 

Известно работать в настоящее время. Но это довольно хрупкий метод. Проверьте Online Regex Tester для регулярных выражений детали информации

Смежные вопросы