HTML 페이지에서 제목을 추출하는 정규식을 원합니다. 현재 나는 이것을 가지고있다 :
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
태그를 제거 할 필요가 없도록 <title>의 내용 만 추출하는 정규식이 있습니까?
HTML 페이지에서 제목을 추출하는 정규식을 원합니다. 현재 나는 이것을 가지고있다 :
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
태그를 제거 할 필요가 없도록 <title>의 내용 만 추출하는 정규식이 있습니까?
답변:
(
)
regexp 및 group(1)
python 에서 사용 하여 캡처 된 문자열을 검색합니다 ( 결과를 찾지 못하면 re.search
반환 None
되므로 직접 사용하지 마십시오group()
).
title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE)
if title_search:
title = title_search.group(1)
import re
그렇지 않으면 얻을 수 있습니다NameError: name 're' is not defined
시작 Python 3.8
및 할당 표현식 (PEP 572) ( :=
연산자) 의 도입으로 if 조건 내에서 직접 일치 결과를 변수로 캡처하고 조건의 본문에서 다시 사용 하여 Krzysztof Krasoń의 솔루션 을 약간 개선 할 수 있습니다. :
# pattern = '<title>(.*)</title>'
# text = '<title>hello</title>'
if match := re.search(pattern, text, re.IGNORECASE):
title = match.group(1)
# hello
캡처 그룹을 사용해보십시오.
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
시험:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
.*?
여러 개가있는 경우에 사용해야 </title>
합니다 (가능성은 없지만 알 수 없음).
이것으로 충분하다고 생각합니다.
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... 텍스트 (HTML)가 "text"라는 변수에 있다고 가정합니다.
이것은 또한 HTML TITLE 태그 내에 합법적으로 삽입 될 수있는 다른 HTML 태그가없고 그러한 컨테이너 / 블록 내에 다른 <문자를 합법적으로 삽입 할 방법이 없다고 가정합니다.
그러나 ...
Python에서 HTML 구문 분석에 정규식을 사용하지 마십시오. HTML 파서를 사용하십시오! (여러 HTML, SGML 및 XML 파서가 이미 표준 라이브러리에있을 때 추가 작업이 될 전체 파서를 작성하지 않는 한.
"실제" 태그를 HTML (SGML / XML 유효성 검사기를 자주 준수하지 않는 경우가 많음)을 처리하는 경우 BeautifulSoup 을 사용하십시오. 패키지 . (아직) 표준 라이브러리에는 없지만이 목적으로 널리 권장됩니다.
또 다른 옵션은 lxml ...입니다. 이것은 적절하게 구조화 된 (표준 준수) HTML 용으로 작성되었습니다. 그러나 BeautifulSoup을 파서로 사용하는 대체 옵션이 있습니다 : ElementSoup .