본문 바로가기
국비 교육/데이터

[데이터 수집] 웹 스크래핑 -1

by 육츠 2023. 10. 30.
Contents 접기

Web Crawling: 인터넷에서 웹페이지를 자동 탐색하고 수집하는 과정
Web Scrapping: 웹 페이지 내에서 원하는 정보를 추출하는 기술을 말함(즉 구조에 맞춰 코드를 가져오는 것을 말한다.)

robots.txt crawling 적법성 여부 확인
웹 사이트에 웹 크롤링 봇들의 접근에 제약을 두기 위한 규약이다.
밑에 사진은 https://www.google.co.kr/robots.txt 안에서 확인한 본문이다.
구글 사이트에서 크롤링 가능한 범위를 규정해 놓았다.

Request 요청의 종류

- GET (정보를 가져오기 위해 요청)
- POST (새로운 정보를 보내기 위해 요청)
- PUT (수정할 정보를 보내기 위해 요청)
- DELETE (정보를 삭제하기 위해 요청)

response = requests.get("https://www.naver.com/") # get 방식으로 요청
# response = requests.get("https://www.naver.com/hello.html")
print(response.status_code) # 200: 정상 / 404: X
URL = "https://search.naver.com/search.naver"
query = {"query":"python"} # "query"는 정해진 key 값이다.

response = requests.get(URL,params=query)
print(response.status_code) # 200 # 상태
print(response.text)

로봇이 아님을 나타내기 위해 'user-agent' 라는 값을 헤더에 넣어 보냄
- user-agent 헤더 값을 포함하여 요청하면 웹 브라우저를 통해 요청하는 것으로 인식되어 해결
- 웹 브라우저 실행 -> F12 눌러 개발자 모드 -> Console -> > navigator.userAgent 입력

import requests

URL = "http://www.google.com/search"
params = {"q":"python"}
# 로봇이 아님을 나타내기 위해서 user-Agent 라는 값을 header에 넣어서 보냄
headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"}

# user-agent 값을 통해서 브라우저의 종류와 버전 정보등을 전달하기 때문에 웹 프로그램은 브라우저별로 최적화된 콘텐츠를 제공하게 됨
response = requests.get(URL, params = params)#, headers = headers)
response.raise_for_status() # 200이 아니면 오류를 내고 멈춤

html = response.text
with open("search_result2.html", "w", encoding = "utf-8") as f:
    f.write(html)

print("저장 완료!")

headers = headers 존재 파일

형식이 달라짐을 알 수 있다.

headers = headers 미존재 파일