본문 바로가기
Python 100제 따라하기/1. 웹스크래핑

(7) 웹 문서에 포함된 모든 하이퍼링크 추출하기

by 영거이 2022. 10. 13.
import requests, re
from bs4 import BeautifulSoup
#라이브러리를 불러온다. 정규식 표현을 사용하기 위해 re 모듈을 추가한다.

url = "<https://en.wikipedia.org/wiki/Seoul_Metropolitan_Subway>"
resp = requests.get(url)
html_src = resp.text
soup = BeautifulSoup(html_src, 'html.parser')
#웹 페이지 문서의 HTML 소스코드를 추출, 파싱하여 BeautifulSoup 객체를 생성한다.
#변수 soup에 저장한다.

links = soup.find_all("a")
print("하이퍼링크의 개수: ", len(links))
print("\\n")
print("첫 3개의 원소: ", links[:3])
print("\\n")
#BeautifulSoup의 find_all() 명령에 찾고자 하는 태그 이름을 매개변수로 전달하면, 웹 문서에서 해당하는 모든 태그를 찾아서 리스트 형태로 리턴한다.
#따라서 soup 객체에 들어 있는 모든 태그를 찾고 변수 links에 저장한다.
#len() 함수로 확인하면 links 변수의 원소 개수는 모두 1215개이다.
#12번 라인은 첫 3개의 원소를 리스트 슬라이싱으로 선택하는 내용이다.

wiki_links = soup.find_all(name="a", href=re.compile("/wiki/"), limit=3)
print("/wiki/ 문자열이 포함된 하이퍼링크: ", wiki_links)
print("\\n")
# 태그의 href 속성이 포함하는 문자열을 따로 지정하면, 해당 문자열이 포함된  태그만을 찾는다.
#예제에서는 출력 길이를 제한하기 위하여 limit 매개변수를 3으로 설정한다.
#따라서 "/wiki/" 문자열이 링크에 포함되어 있는  태그를 3개 찾아서 변수 wiki_links에 저장한다.

external_links = soup.find_all(name="a", attrs={"class":"external text"}, limit=3)
print("class 속성으로 추출한 하이퍼링크: ", external_links)
#find_all() 메소드의 attrs 매개변수에 {'속성 이름':'속성값"}의 딕셔너리 형태로 찾으려는 태그가 갖는 속성값을 지정할 수 있다.
#class 속성값이 "external text"인  태그를 모두 찾아서 리스트 형태로 리턴한다.
#limit 매개변수를 3으로 설정하여 3개까지 추출한다.

실행결과

 

`하이퍼링크의 개수: 1215

 

첫 3개의 원소: [<a id="top"></a>, <a class="mw-jump-link" href="#mw-head">Jump to navigation</a>, <a class="mw-jump-link" href="#searchInput">Jump to search</a>]

 

/wiki/ 문자열이 포함된 하이퍼링크: [<a href="/wiki/Wikipedia:No_original_research" title="Wikipedia:No original research">original research</a>, <a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability">verifying</a>, <a href="/wiki/Wikipedia:Citing_sources#Inline_citations" title="Wikipedia:Citing sources">inline citations</a>]

 

class 속성으로 추출한 하이퍼링크: [<a class="external text" href="https://en.wikipedia.org/w/index.php?title=Seoul_Metropolitan_Subway&action=edit">improve it</a>, <a class="external text" href="https://deepl.com" rel="nofollow">DeepL</a>, <a class="external text" href="https://translate.google.com/" rel="nofollow">Google Translate</a>]`

 

해당 예제를 통해 실무에서…

  • 해당 사이트에서 찾고자하는 태그종류의 개수 및 특정 성격의 태그만 추출해줄 수 있는 자동화 프로그램을 만들 수 있다.

댓글