문제

다음과 같은 HTML 링크가 주어지면

<a href="urltxt" class="someclass" close="true">texttxt</a>

URL과 텍스트를 어떻게 분리할 수 있나요?

업데이트

저는 Beautiful Soup을 사용하고 있는데 어떻게 해야 할지 모르겠습니다.

내가 그랬어

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))

links = soup.findAll('a')

for link in links:
    print "link content:", link.content," and attr:",link.attrs

나는 얻다

*link content: None  and attr: [(u'href', u'_redirectGeneric.asp?genericURL=/root    /support.asp')]*  ...
...

콘텐츠가 누락된 이유는 무엇인가요?

편집하다:조언대로 '고착'에 대해 자세히 설명했습니다 :)

도움이 되었습니까?

해결책

사용 아름다운 수프.직접 수행하는 것은 보기보다 어렵습니다. 시도되고 테스트된 모듈을 사용하는 것이 더 나을 것입니다.

편집하다:

내 생각엔 당신이 원하는 것:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read())

그건 그렇고, URL을 열어보는 것은 나쁜 생각입니다. 잘못되면 보기 흉해질 수 있기 때문입니다.

편집 2:

그러면 페이지의 모든 링크가 표시됩니다.

import urlparse, urllib
from BeautifulSoup import BeautifulSoup

url = "http://www.example.com/index.html"
source = urllib.urlopen(url).read()

soup = BeautifulSoup(source)

for item in soup.fetchall('a'):
    try:
        link =  urlparse.urlparse(item['href'].lower())
    except:
        # Not a valid link
        pass
    else:
        print link

다른 팁

다음은 링크의 속성과 내용을 가져오는 것을 보여주는 코드 예제입니다.

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))
for link in soup.findAll('a'):
    print link.attrs, link.contents

거기에는 두 가지 문제가 있는 것 같습니다.

  1. 링크.콘텐츠에스, link.content 아님
  2. attrs는 문자열이 아니라 사전입니다.HTML 요소의 각 속성에 대한 키 값 쌍을 보유합니다.link.attrs['href'] 는 찾고 있는 것으로 보이는 것을 얻을 수 있지만 href 속성이 없는 태그를 발견할 경우를 대비해 이를 검사로 포장하는 것이 좋습니다.

다른 사람들은 그럴 거라고 생각하지만 ~할 것 같다 Beautiful Soup을 사용하도록 지시하는 것이 정확합니다. ~할 것 같다 그렇지 않으며 외부 라이브러리를 사용하는 것은 귀하의 목적에 비해 엄청나게 과장될 수 있습니다.다음은 귀하가 요청한 것을 수행하는 정규식입니다.

/<a\s+[^>]*?href="([^"]*)".*?>(.*?)<\/a>/

일치하는 내용은 다음과 같습니다.

'<a href="url" close="true">text</a>'
// Parts: "url", "text"

'<a href="url" close="true">text<span>something</span></a>'
// Parts: "url", "text<span>something</span>"

얻고 싶었다면 단지 텍스트(예:위의 두 번째 예에서 "textsomething"), 뾰족한 괄호 사이의 내용을 제거하기 위해 또 다른 정규식을 실행했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top