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
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
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 학원 강의 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 웹 크롤링 | BeautifulSoup의 select_one() 과 select(), CSS select 지정 형식 (0) | 2024.03.08 |
---|---|
[Python] 웹 크롤링 | BeautifulSoup 사용법, find() 와 find_all() (1) | 2024.03.08 |
[Python] XML 정의 및 xmltodict 라이브러리, 예제 (2) | 2024.03.06 |
[Python] JSON API 활용 예제 2 (0) | 2024.03.06 |
[Python] 공공데이터 활용한 JSON API 예제 (2) | 2024.03.05 |