728x90
import requests
from bs4 import BeautifulSoup
from requests.exceptions import SSLError
from urllib.parse import urlparse, urljoin
def get_links(url):
"""
주어진 URL에서 모든 링크를 추출한다.
"""
# 페이지를 가져온다.
try:
response = requests.get(url, verify=True)
# BeautifulSoup을 사용하여 HTML을 파싱한다.
soup = BeautifulSoup(response.text, "html.parser")
# 페이지의 모든 링크를 찾아서 리스트에 추가한다.
links = []
for link in soup.find_all('a'):
href = link.get('href')
if href is not None:
absolute_link = urljoin(url, href)
parsed_link = urlparse(absolute_link)
#if parsed_link.scheme in ('http', 'https') and parsed_link.netloc not in seen_domains:
if parsed_link.scheme in ('http', 'https'):
links.append(absolute_link)
return links
except SSLError:
return []
def crawl(url):
"""
주어진 URL에서 시작하여 재귀적으로 모든 링크를 추적한다.
"""
# URL의 도메인을 추출한다.
parsed_url = urlparse(url)
seen_domains.add(parsed_url.netloc)
# URL에서 모든 링크를 추출한다.
links = get_links(url)
# 링크를 따라가서 재귀적으로 처리한다.
for link in links:
if link not in seen_links:
seen_links.add(link)
print(link)
crawl(link)
# 시작 URL을 정의한다.
# 이미 방문한 도메인과 링크를 추적하는 세트를 초기화한다.
seen_domains = set()
seen_links = set()
# 크롤링을 시작한다.
crawl(start_url)
728x90
'수학 & 코딩' 카테고리의 다른 글
수학 잘하는 아이, 엄마 코칭에 답이 있습니다. (8) | 2023.08.02 |
---|---|
반지름이 다른 두개의 원에 접선이 지나가고 이 접선에 대해 ... ... (0) | 2023.08.02 |
원주율 파이를 소숫점 1만개 자리까지 구하기 (0) | 2023.02.22 |
2차원 평면에 임의 반지름을 갖는 임의의 갯수의 공들이 겹치는 부분이 있으면 반발하도록 하는 움직임 - 공간 내에서 입자(공)간 서로 반발하는 현상 모사 - 분자 운동 - 코드 조언은 "chatGPT"로.. (0) | 2023.02.21 |
2차원 평면에서 임의의 점을 모두 연결하는 다각형 폐곡면을 그리는 코드 (N 가능) (0) | 2023.02.20 |