복붙노트

[PYTHON] HTML 링크에서 URL을 추출하는 정규 표현식

PYTHON

HTML 링크에서 URL을 추출하는 정규 표현식

저는 파이썬에서 초보자입니다. 나는 정규 표현식을 배우고 있지만 여기서 도움이 필요하다.

다음은 HTML 소스입니다.

<a href="http://www.ptop.se" target="_blank">http://www.ptop.se</a>

http://ptop.se 밖에 인쇄하지 않는 도구를 작성하려고합니다. 도와 줄수있으세요?

해결법

  1. ==============================

    1.당신이 오직 하나만 찾고 있다면 :

    당신이 오직 하나만 찾고 있다면 :

    import re
    match = re.search(r'href=[\'"]?([^\'" >]+)', s)
    if match:
        print match.group(0)
    

    긴 문자열을 가지고 있고 그 안에 패턴의 모든 인스턴스를 원한다면 :

    import re
    urls = re.findall(r'href=[\'"]?([^\'" >]+)', s)
    print ', '.join(urls)
    

    여기서 s는 찾고자하는 문자열입니다.

    정규 표현식 비트에 대한 간단한 설명 :

    BeautifulSoup 사용에 대한 또 다른 대답은 나쁘지는 않지만 더 높은 수준의 외부 요구 사항을 도입합니다. 게다가 그것은이 정규 html 파싱 프로젝트가 단지 일부라고 가정하는 정규 표현식 학습의 목표에 도움이되지 않습니다.

    꽤 쉽게 할 수 있습니다 :

    from BeautifulSoup import BeautifulSoup
    soup = BeautifulSoup(html_to_parse)
    for tag in soup.findAll('a', href=True):
        print tag['href']
    

    일단 BeautifulSoup을 설치하면 어쨌든.

  2. ==============================

    2.regexes를 사용하지 마십시오. BeautifulSoup을 사용하십시오. w3m / lynx로 그것을 생성하고 w3m / lynx가 렌더링하는 것을 되 돌리는 것만큼이나 너무 무거웠습니다. 첫 번째는 좀 더 우아 할 것입니다. 둘째, 잠시 썼던 일부 최적화되지 않은 코드에서 두 번째 작업이 훨씬 빨라졌습니다.

    regexes를 사용하지 마십시오. BeautifulSoup을 사용하십시오. w3m / lynx로 그것을 생성하고 w3m / lynx가 렌더링하는 것을 되 돌리는 것만큼이나 너무 무거웠습니다. 첫 번째는 좀 더 우아 할 것입니다. 둘째, 잠시 썼던 일부 최적화되지 않은 코드에서 두 번째 작업이 훨씬 빨라졌습니다.

  3. ==============================

    3.이것은 더 우아한 방법이 있을지 모르지만 작동해야합니다.

    이것은 더 우아한 방법이 있을지 모르지만 작동해야합니다.

    import re
    url='<a href="http://www.ptop.se" target="_blank">http://www.ptop.se</a>'
    r = re.compile('(?<=href=").*?(?=")')
    r.findall(url)
    
  4. ==============================

    4.John Gruber (정규 표현식으로 만들어졌으며 Stack Overflow에서 바로 사용되는 Markdown을 쓴) John Gruber는 텍스트의 URL을 인식하는 정규 표현식을 작성했습니다.

    John Gruber (정규 표현식으로 만들어졌으며 Stack Overflow에서 바로 사용되는 Markdown을 쓴) John Gruber는 텍스트의 URL을 인식하는 정규 표현식을 작성했습니다.

    http://daringfireball.net/2009/11/liberal_regex_for_matching_urls

    URL을 가져 오려면 (HTML을 구문 분석하지 않으려는 경우) HTML 파서보다 가볍습니다.

  5. ==============================

    5.Regexes는 근본적으로 HTML을 파싱 할 때 좋지 않습니다 (왜 XML과 HTML을 정규식으로 파싱하는 것이 어려운지에 대한 몇 가지 예를 제공 할 수 있습니까?). 필요한 것은 HTML 파서입니다. 좋아하는 파서로 HTML을 파싱하는 예제를 제공 할 수 있습니까?를 참조하십시오. 예를 들어 다양한 파서를 사용합니다.

    Regexes는 근본적으로 HTML을 파싱 할 때 좋지 않습니다 (왜 XML과 HTML을 정규식으로 파싱하는 것이 어려운지에 대한 몇 가지 예를 제공 할 수 있습니까?). 필요한 것은 HTML 파서입니다. 좋아하는 파서로 HTML을 파싱하는 예제를 제공 할 수 있습니까?를 참조하십시오. 예를 들어 다양한 파서를 사용합니다.

    특히 Python의 답변 인 BeautifulSoup, HTMLParser 및 lxml을 살펴보아야합니다.

  6. ==============================

    6.regexlib에 그 중 톤이 있습니다.

    regexlib에 그 중 톤이 있습니다.

  7. ==============================

    7.예, regexlib에는 그 중 많은 수가 있습니다. RE를 사용해서는 안된다는 것을 증명할뿐입니다. SGMLParser 또는 BeautifulSoup를 사용하거나 파서를 작성하십시오. 그러나 RE는 사용하지 마십시오. 작동하는 것으로 보이는 것들은 상당히 복잡하고 여전히 모든 경우를 다루지는 않습니다.

    예, regexlib에는 그 중 많은 수가 있습니다. RE를 사용해서는 안된다는 것을 증명할뿐입니다. SGMLParser 또는 BeautifulSoup를 사용하거나 파서를 작성하십시오. 그러나 RE는 사용하지 마십시오. 작동하는 것으로 보이는 것들은 상당히 복잡하고 여전히 모든 경우를 다루지는 않습니다.

  8. ==============================

    8.이것은 선택적 매치 (href = 다음에 인쇄)를 사용하여 꽤 잘 작동하고 링크 만 가져옵니다. http://pythex.org/에서 테스트 됨

    이것은 선택적 매치 (href = 다음에 인쇄)를 사용하여 꽤 잘 작동하고 링크 만 가져옵니다. http://pythex.org/에서 테스트 됨

    (?:href=['"])([:/.A-z?<_&\s=>0-9;-]+)
    

    산출:

  9. ==============================

    9.이 정규식이 도움이 될 수 있습니다, 당신은 \ 1 또는 당신이 당신의 언어로 가지고있는 모든 방법으로 첫 번째 그룹을 얻어야합니다.

    이 정규식이 도움이 될 수 있습니다, 당신은 \ 1 또는 당신이 당신의 언어로 가지고있는 모든 방법으로 첫 번째 그룹을 얻어야합니다.

    href="([^"]*)
    

    예:

    <a href="http://www.amghezi.com">amgheziName</a>
    

    결과:

    http://www.amghezi.com
    
  10. ==============================

    10.이것을 사용할 수 있습니다.

    이것을 사용할 수 있습니다.

    <a[^>]+href=["'](.*?)["']
    
  11. from https://stackoverflow.com/questions/499345/regular-expression-to-extract-url-from-an-html-link by cc-by-sa and MIT license