1.  url을 이용해서 HTML를 가져오는 방법

 

🚀  크롤링할 때 url을 이용해서 HTML를 가져오는 방법은 크게 2가지
      a. 내장 모듈인 urllib를 사용 
      b. 외장 모듈인 requests를 사용

 

1) urllib를 사용한 경우

# 정상 접속
url = "https://www.python.org/"
code = request.urlopen(url)
print(code)  # <http.client.HTTPResponse object at 0x103f16b30>

# 비정상 접속. 비정상일 경우 에러 발생.
url = "https://www.python.org/1"
code = request.urlopen(url)
print(code)

비정상 접속인 경우 실행 결과

 


 

2) requests를 사용한 경우

# 정상 접속인 경우
url = "https://www.python.org/"
response = requests.get(url)
print(response)  # <Response [200]>. 정상적인 통신이 이루어짐.

# 페이지가 없는 경우에도 에러가 발생하지 않고, Response [404]를 리턴.
url = "https://www.python.org/1"
response = requests.get(url)
print(response)  # <Response [404]>. 해당 페이지를 찾을 수 없음

 

  👾  requests 를 사용하면 urllib 를 사용한 경우와 달리 비정상 접속인 경우 에러가 발생하지 않고 응답코드를 준다

 

    📌  응답코드 : 서버에서 클라이언트로 보내는 코드
          a. 1XX : 요청을 받았고, 작업 진행 중
          b. 2XX : 사용자의 요청이 성공적으로 수행 됨
          c. 3XX : 요청은 완료 되었으나, 리다이렉션이 필요
          d. 4XX : 사용자의 요청이 잘못됨
          e. 5XX : 서버에 오류가 발생함

 


 

2. requests 사용법

 

🚀  서버로 요청을 할 때 브라우저의 정보(User-Agent)가 같이 전달됨
        ➡️ 요청 받은 서버에서는 브라우저의 정보를 가지고 접속자가 bot인지 일반 사용자임을 구분
        ➡️ 특정 사이트의 경우 요청하는 브라우저의 정보가 일반 사용자가 아니면 접속을 막는 경우가 있음
        ➡️ requests의 경우 브라우저의 헤더 정보를 수정해서 일반 브라우저 처럼 접속할 수 있게 함

 

# requests 사용법

url = 'https://www.naver.com/'
response = requests.get(url)  # get() 또는 post() 메서드를 이용해서 html 정보를 받아옴

html = response.text  # response 객체의 text 속성을 지정하면 html 정보 반환.
print(html)  # html 소스가 출력

headers = response.headers  
print(headers)  # response 객체의 headers 속성 지정하면 헤더 정보 반환.

 

 

1) 헤더 정보 확인하기

 

  👾  requests를 이용해서 url 접속을 하면 브라우저의 정보(User-Agent)가 requests의 모듈 정보로 나옴
          ➡️ 서버에서 해당 정보를 보고 크롤링을 판단할 수 있음

from bs4 import BeautifulSoup as bs
import requests

url = 'https://planet-trade.kr/header_info.php'

response = requests.get(url)  # 브라우저 접속 역할을 파이썬 requests가 해줌
soup = bs(response.text, 'html.parser')
print(soup)
# 접속 IP : 58.149.46.252
# 접속 정보 : python-requests/2.31.0

url 주소로 접속했을 때 브라우저의 정보

 


 

2) requests에서 헤더 정보를 변경

request_headers = {
    'User-Agent': ('(url 주소로 들어갔을 때 나오는 브라우저 접속 정보)'),
    'Referer': '',
}

resp = requests.get(url, headers=request_headers) # 변경된 헤더로 접속, 정보 가져옴
soup = bs(resp.text, 'html.parser')
print(soup)

# 접속 IP : 58.149.46.252
# 접속 정보 : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
# (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36

 


 

2. 크롤링 할 때 운영자 의사 확인

 

🚀  모든 크롤링이 불법은 아니지만 하지만 운영자의 의사에 상관없이 무단으로 크롤링하는 것은 불법
🚀  운영자의 크롤링 허용 여부를 알 수 있는 방법은 'robot.txt' 로 확인
        ➡️ allow는 허용, disallow는 검색 불가

 

    💡  robots.txt 설정 정보 안내 사이트

           https://searchadvisor.naver.com/guide/seo-basic-robots
           https://developers.google.com/search/docs/advanced/robots/intro?hl=ko

 

robots.txt 설정하기

robots.txt는 검색로봇에게 사이트 및 웹페이지를 수집할 수 있도록 허용하거나 제한하는 국제 권고안입니다. IETF에서 2022년 9월에 이에 대한 표준화 문서를 발행하였습니다. robots.txt 파일은 항상

searchadvisor.naver.com

 

robots.txt 소개 및 가이드 | Google 검색 센터  |  문서  |  Google for Developers

robots.txt는 크롤러 트래픽을 관리하는 데 사용됩니다. robots.txt 소개 가이드에서 robots.txt 파일의 정의와 사용 방법을 알아보세요.

developers.google.com

 

urls = ['https://www.naver.com/', 'https://ko.wikipedia.org/']
filename = 'robots.txt'

for url in urls:
    file_path = url + filename
    print(file_path)
    resp = requests.get(file_path)
    print(resp.text)
    print("\n")

실행 결과

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

+ Recent posts