관리 메뉴

DeseoDeSeo

[Crawling] Request 사용법 본문

Crawling

[Crawling] Request 사용법

deseodeseo 2023. 9. 25. 18:51
req : 파이썬에서 브라우저의 역할을 대신
import requests as req

클라이언트(사용자)  : 특정url에 정보를 요청

서버(웹페이지)   : 요청받은 값에 대한 정보를 클라이언트에게 제공 

                               ➜ 이미지, 동영상, 글자,화면이 html문서로 넘어옴.

                        ' Python의 requests가 하는 건 중간에 넘어오고 있는 html문서 가져오기. '

 

#1. req를 통해서 네이버 정보를 요청
#   괄호 안에는 매개변수 = 무엇을 가지고 올지 적는다.
# 2. response(res) -> 응답 코드를 넘겨 받는다.
#   (200, 300 : 통신에 성공했습니다.)
#   (400: 클라이언트 요청의 문제가 있다.)
#   (500: 서버의 문제가 있다.)
res = req.get("http://www.naver.com")
# html의 코드가 넘어옴.
res.text

 


head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'}
# 응답코드가 406은 요청의 문제가 있다.
# 멜론 서버에서 들어온 요청이 브라우저가 아닌 컴퓨터임을 인지함.
# a사람인척 속이면 된다.

res1 = req.get("https://www.melon.com/", headers = head)

res1

뉴스 타이틀 수집
# 1. 네이버 사이트( 검색한 뉴스 화면) 를 요청.
res = req.get("https://search.naver.com/search.naver?sm=tab_hty.top&where=news&query=%EA%B4%91%EC%A3%BC&oquery=%EC%8A%A4%ED%8E%98%EC%9D%B8&tqi=iMjXPlp0JywssLEx7%2F4ssssssg0-232988")
res.text


BeautifulSoup 라이브러리

  • req를 통해서 받아온 텍스트 데이터를 컴퓨터가 이해할 수 있는 html형태로 변환시켜줌.
# 주의할 점. ston이 아닌 일반 soup을 import해야함.
# from 모듈 import 패키지

from bs4 import BeautifulSoup as bs
# 2. 응답을 받은 데이터에서 뉴스 타이틀만 수집.
# 내가 가지고 있는 res.text를 lxml형태로 해줭. bs에게
soup = bs(res.text, "lxml")
# a태그만 가져와줘
# id는 페이지당 1개이고 class는 여러개 사용 가능.
# a 태그 중에서 이 클래스들만 가져오겠다.
# select("선택자") : html데이터에서 특정 요소(태그와 컨텐츠)만 수집.
title= soup.select("a.news_tit")
# 수집된 요소 중에 컨텐츠(텍스트)데이터만 추출
title[0].text

# 뉴스의 타이틀만 가져오기.
for i in title:
    print(i.text)

네이버 금융 정보
# 1.req를 통해서 url정보를 요청
res = req.get("https://finance.naver.com/")
res
# 2.  응답데이터가 올바르다면 bs을 통해서 html형태로 변형
soup = bs(res.text, "lxml")
# 3. 변형된 데이터에서 필요한 태그만 수집.
#   (팁 : 부모 자식을 의미하는 자식 선택자를 잘 활용해야함.)
#   수집하고자 하는 요소가 아이디, 클래스 구분자가 없다면 반드시 부모를 검사해야함.
#   부모태그가 구분자가 존재 할때 까지 검사를 진행.
#   구분자가 없는 경우에는 정확하지 않을 확률이 높음.
top = soup.select("#_topItems1>tr>th > a")
top[0].text

 원하는 요소 ➜  검사 ➜  f12에서 해당 부분에 우클릭 ➜  copy
➜  copyselector하면 선택자가 자동으로 복사됨.
( 주의점 ! 반드시 내가 선택한 하나만 가지고 온다.) 
#_topItems1 > tr:nth-child(1) > th > a
( 복수개가 필요한 경우에는 선택자를 수정 : nth-child() 이 부분을 수정해야한당.)
In [ ]:​