Yeonnnnny

[Web Scrapping] requests 모듈 본문

Data Analysis

[Web Scrapping] requests 모듈

yeonny_do 2023. 11. 1. 09:24

■  특정 사이트 접속

 

   - requests 객체를 import한 후 get() 함수를 이용해 지정된 사이트에 접속함

 

import requests

response = requests.get(url, params, **kwargs)

 

   - url : 접속할 url의 정보

   - params : 해당 url의 파라미터 문자열 정보 입력(dictionary 객체로 전달)

   - **kwargs: 그 외 매개변수

 

○ verify=False : SSL인증서를 사용하는 경우
○ auth = ('id','pass')  : 인증이 필요한 경우
○ headers = ('Content-Type' : 'application/json; charset=utf-8')
○ cookies = {'sessionKey':'sessionValue'}
○ timeout = 3

 

 

■  requests 모듈을 이용한 사이트 접속 후 페이지 정보 가져오기

 

요청의 종류
1. GET : 정보를 가져오기 위해 요청
2. POST : 새로운 정보를 보내기 위해 사용하는 요청
3. PUT : 수정할 정보를 보내기 위해 요청
4. DELETE : 정보를 삭제하기 위한 요청

 


 import requests
 response = requests.get('http://naver.com'
 print(response.status_code)  # 200 : 정상작동
 print(response.text)
 

 

○ 데이터 파싱 
    requests.get(url).text  (text형태로 추출)
    requests.get(url).content  (byte형태로 추출)
○ 상태 코드 확인
    response.statuse_code (상태코드  확인, 성공시 : 200 )

 

 

■  응답코드

   - 지정된 사이트에 접속한 후 status_code 속성을 이용하면 응답코드 값을 알 수 있음

   - 응답코드 값이 200이면 정상접속, 다른 값이면 오류이거나 권한이 없음을 나타내므로 상태에 따른 다른 처리 필요

 

 

■  parameter를 이용한 검색결과 조회

 

   - 요청을 보낼 때 파라미터를 이용해 그 결과를 확인할 수 있음

   - 파라미터가 여러 개일 경우는 다음과 같이 dictionary를 여러 개 주어 처리 가능

 

url = 'http://comic.naver.com/webtoon/detail.nhn'
params ={'titleId':703846,'no':144,'weekday':'tue'}

 

 

  □ 활용

 

 # 로봇이 아님을 나타내기 위해서 user-agent라는 값을 header에 넣어서 보냄  
 # 직접적인 url 주소로 요청시, 웹사이트에서 웹크롤링을 통해서 접근한 것을 갑지하고 접속을 차단하게 됨
 # user-agent 헤더값을 포함하여 요청하면 웹브라우저를 통해 요청하는 것으로 인식되어 해결
 # 웹브라우저 실행 ->F12를 눌러 개발자 모드->console->navigator.userAgent 입력
 # "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" 값 가져옴

import requests

params = {'q':'python'} #구글은 q, 네이버는 query

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'}

response = requests.get(url,params=params,headers=headers)
response.raise_for_status() # 200이 아니면 오류를 내고 멈춤

html = response.text

with open('search_result.ht,','w',encoding='utf-8') as f:
    f.write(html)

print('저장완료')
 

 

 
# 네이버 실시간 인기 검색어 추출

response =requests.get('http://datalab.naver.com')
html = response.text

temp = html.split('<em class="num">1</em>')[1]
temp = temp.split('<span class="title">')[1]
temp= temp.split('</span>')[0]
print(temp)
 

'Data Analysis' 카테고리의 다른 글

정규 표현식 part2  (1) 2023.11.01
정규 표현식 part1  (0) 2023.11.01
HTTP 요청/응답  (0) 2023.11.01
Dom (Document Object Model)  (0) 2023.10.31
Web 구성요소 - css  (1) 2023.10.31