2013-08-19 4 views
1

내가 파이썬 정규식 URL을 잡아

링크가 말할 문제가 정규식

를 사용하여 HTML 링크의 일부를 선택하는 방법을 파악하는 데 문제 : 나는 레이스 ID를 얻는 방법을 알아 낸

<a href="race?raceid=1234">Mushroom Cup</a> 

, 하지만 나는 내 인생에서 정규 표현식을 사용하여 '버섯 컵'을 찾는 방법을 알아낼 수 없습니다. 내가 할 수있는 최선의 방법은 1234> 버섯 컵입니다.

정규식을 처음 접했고 이해하기가 너무 어렵습니다.

+2

입력 값은 얼마나 다를 수 있습니까? 대용량 문서의 여러 위치에서이 데이터를 추출하는 경우 정규식 대신 HTML 파서를 사용하는 것이 좋습니다. –

답변

1

뭔가 매우

re.findall('<a href="race\?raceid=(\d+)">([^<]+)</a>',html_text) 
+0

아름다운 수프 (나는 아나콘다 파이썬 패키지 배포판을 가지고있다)를 다운로드하는 데 문제가있다. 그래서이 정규식 응답 – amchugh89

+0

에 감사한다. html을 파싱하기 위해 정규식을 사용하지 말아라. :) – alecxe

+0

정규식 ... 일반적으로 동의하지만 일반적으로 동의합니다 –

1

같은 지금까지 HTML을 구문 분석에 대한 정규식을 사용하지 마십시오. 대신 lxml 또는 BeautifulSoup과 같은 HTML 파서를 사용하십시오. urlparse 링크 매개 변수의 값을 얻기 위해 사용되는,

import urlparse 
from bs4 import BeautifulSoup 

soup = BeautifulSoup(""" 
<html> 
<head> 
    <title>Python regex url grab - Stack Overflow</title> 
</head> 
<body> 
    <a href="race?raceid=1234">Mushroom Cup</a> 
</body> 
</html 
""") 

link = soup.find('a') 
par = urlparse.parse_qs(urlparse.urlparse(link.attrs['href']).query) 
print par['raceid'][0] # prints 1234 
print link.text # prints Mushroom Cup 

참고 :

여기 BeautifulSoup를 사용하는 예제입니다. 자세한 내용은 Retrieving parameters from a URL을 참조하십시오.

또한 참조 : 도움이

희망.

+0

오 ... 그게 더 좋을 것 같습니다. – amchugh89

+1

+1 나는 일반적으로 구문 분석에 동의합니다. html로 정규 표현식을 사용하는 것은 좋지 않지만이 솔루션이 OP 질문에 대한 간단한 정규 표현식보다 월등 한 이유를 설명하는 것이 좋습니다. 정규식을 사용하지 않는 몇 가지 이유가 있음을 압니다 (주로 html은 중첩 된 언어이고 정규식은 그렇게 잘 중첩되지 않습니다) –