2011-01-14 3 views
0

Этот вопрос задан несколько раз на SO, но я не мог получить ответы на правильные ответы. Мне нужно извлечь все URL-адреса на странице как в ссылках href, так и в обычном тексте. Мне не нужны отдельные группы регулярных выражений. Мне нужен список строк, т. Е. URL-адреса на странице. Может ли кто-нибудь указать мне на хороший рабочий пример?Regex извлечь все URL-адреса со страницы

Я хотел бы сделать это с помощью Regexs и не BeautifulSoup и т.д.

Спасибо.

ответ

3

HTML не является regular language и поэтому не может быть проанализирован с помощью регулярных выражений.

Это можно сделать правдоподобные предположения с использованием регулярных выражений, и/или признать ограниченное подмножество URIs, но это путь к безумию (длительные процессы отладки, неточные результаты).

Это сказало, если вы готовы идти по этому пути, см John Gruber's regex for the purpose:

def extract_urls(your_text): 
    url_re = re.compile(r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))') 
    for match in url_re.finditer(your_text): 
    yield match.group(0) 

Это может быть использовано следующим образом:

>>> for uri in extract_urls('http://foo.bar/baz irc://freenode.org/bash'): 
... print uri 
http://foo.bar/ 
irc://freenode.org 
+1

+1, а просто примечание, потому что я думаю в этом случае OP не __parsing html__ он просто __searching__ в тексте для URL-адресов, и этот текст оказывается html. – mouad

+1

@singularity - действительно; поэтому я потрудился дать реальный ответ после общего предупреждения против неправильного использования. :) –

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