[python] 파이썬을 사용하여 HTML에서 href 링크를 얻으려면 어떻게해야합니까?


2 Answers

HTMLParser 모듈을 사용할 수 있습니다.

코드는 아마도 다음과 같이 보일 것입니다.

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        # Only parse the 'anchor' tag.
        if tag == "a":
           # Check the list of defined attributes.
           for name, value in attrs:
               # If href is defined, print it.
               if name == "href":
                   print name, "=", value


parser = MyHTMLParser()
parser.feed(your_html_string)

참고 : HTMLParser 모듈은 Python 3.0에서 html.parser로 이름이 변경되었습니다. 2to3 도구는 소스를 3.0으로 변환 할 때 자동으로 가져 오기를 적용합니다.

Question
import urllib2

website = "WEBSITE"
openwebsite = urllib2.urlopen(website)
html = getwebsite.read()

print html

여태까지는 그런대로 잘됐다.

그러나 나는 일반 텍스트 HTML에서 href 링크 만 원한다. 이 문제를 어떻게 해결할 수 있습니까?




내 대답은 아마 거기 밖으로 진정한 전문가와 비교하지만, 몇 가지 간단한 수학, 문자열 썰기, 찾기 및 urllib를 사용하여,이 작은 스크립트는 링크 요소를 포함하는 목록을 만들 것입니다. 나는 구글을 테스트하고 내 결과는 옳은 것처럼 보인다. 희망이 도움이됩니다!

import urllib
test = urllib.urlopen("http://www.google.com").read()
sane = 0
needlestack = []
while sane == 0:
  curpos = test.find("href")
  if curpos >= 0:
    testlen = len(test)
    test = test[curpos:testlen]
    curpos = test.find('"')
    testlen = len(test)
    test = test[curpos+1:testlen]
    curpos = test.find('"')
    needle = test[0:curpos]
    if needle.startswith("http" or "www"):
        needlestack.append(needle)
  else:
    sane = 1
for item in needlestack:
  print item



이 특정 작업에 BS4를 사용하면 잔인한 것으로 보입니다.

대신 시도해보십시오.

website = urllib2.urlopen('http://10.123.123.5/foo_images/Repo/')
html = website.read()
files = re.findall('href="(.*tgz|.*tar.gz)"', html)
print sorted(x for x in (files))

http://www.pythonforbeginners.com/code/regular-expression-re-findall 에서이 멋진 코드 조각을 발견하고 꽤 잘 작동합니다.

나는 그것의 파일 \ 폴더를 드러내는 웹 폴더에서 파일 목록을 추출하는 나의 시나리오에서만 그것을 테스트했다. 예를 들면 :

URL 아래에 파일 \ 폴더의 정렬 된 목록이 있습니다.



Related