복붙노트

[PYTHON] regex href 속성에서 HTML에서 파이썬으로 URL을 추출하는 [duplicate]

PYTHON

regex href 속성에서 HTML에서 파이썬으로 URL을 추출하는 [duplicate]

다음과 같이 문자열을 고려하십시오.

string = "<p>Hello World</p><a href="http://example.com">More Examples</a><a href="http://example2.com">Even More Examples</a>"

어떻게 파이썬으로 앵커 태그의 href 내부에서 URL을 추출 할 수 있습니까? 같은 것 :

>>> url = getURLs(string)
>>> url
['http://example.com', 'http://example2.com']

감사!

해결법

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

    1.

    import re
    
    url = '<p>Hello World</p><a href="http://example.com">More Examples</a><a href="http://example2.com">Even More Examples</a>'
    
    urls = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', url)
    
    >>> print urls
    ['http://example.com', 'http://example2.com']
    
  2. ==============================

    2.가장 좋은 대답은 ...

    가장 좋은 대답은 ...

    수용된 대답의 표현은 많은 경우를 그리워합니다. 무엇보다도 URL에는 유니 코드 문자가있을 수 있습니다. 당신이 원하는 정규 표현식은 여기에 있고, 그것을보고 난 후에, 당신은 정말로 결국 그것을 원하지 않는다고 결론을 내릴 수 있습니다. 가장 올바른 버전은 10,000 문자입니다.

    틀림없이, URL에 많은 수의 일반 텍스트가있는 구조화되지 않은 텍스트로 시작하는 경우 10,000 자 길이의 정규 표현식이 필요할 수 있습니다. 그러나 입력 내용이 구조화되어 있다면 구조를 사용하십시오. 귀하의 명시된 목표는 "앵커 태그의 href 내부에서 URL을 추출하는 것입니다." 훨씬 간단한 것을 할 수있을 때 왜 10,000 문자 길이의 정규 표현식을 사용합니까?

    많은 작업에서 Beautiful Soup를 사용하면 훨씬 빠르고 쉽게 사용할 수 있습니다.

    >>> from bs4 import BeautifulSoup as Soup
    >>> html = Soup(s, 'html.parser')           # Soup(s, 'lxml') if lxml is installed
    >>> [a['href'] for a in html.find_all('a')]
    ['http://example.com', 'http://example2.com']
    

    외부 도구를 사용하지 않으려는 경우 Python에 내장 된 HTML 구문 분석 라이브러리를 직접 사용할 수도 있습니다. 다음은 HTMLParser의 정말 간단한 서브 클래스로 원하는 것을 정확히 수행 한 것입니다.

    from html.parser import HTMLParser
    
    class MyParser(HTMLParser):
        def __init__(self, output_list=None):
            HTMLParser.__init__(self)
            if output_list is None:
                self.output_list = []
            else:
                self.output_list = output_list
        def handle_starttag(self, tag, attrs):
            if tag == 'a':
                self.output_list.append(dict(attrs).get('href'))
    

    테스트:

    >>> p = MyParser()
    >>> p.feed(s)
    >>> p.output_list
    ['http://example.com', 'http://example2.com']
    

    문자열을 받아들이고, feed를 호출하고, output_list를 반환하는 새로운 메소드를 만들 수도 있습니다. 이것은 html에서 정보를 추출하는 정규 표현식보다 훨씬 강력하고 확장 가능한 방식입니다.

  3. from https://stackoverflow.com/questions/6883049/regex-to-extract-urls-from-href-attribute-in-html-with-python by cc-by-sa and MIT license