관리 메뉴

DeseoDeSeo

[Crawling] Request 사용법 본문

Python

[Crawling] Request 사용법

deseodeseo 2023. 8. 24. 15:02
req : 파이썬에서 브라우저의 역할을 대신 함.

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

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

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

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

 

import requests as req
  1. req 를 통해서 네이버 정보를 요청 ( 괄호 안에는 매개변수 = 무엇을 가지고 올지 적음)
  2. response : 응답 코드를 넘겨 받음. 

 

  • (200, 300 : 통신에 성공했습니다.)
  • (400: 클라이언트 요청의 문제가 있다.)
  • (500: 서버의 문제가 있다.)
res = req.get("http://www.naver.com")

# html의 코드가 넘어온다.

res.text


key: value형태면 객체 형태의 데이터 임.
( '멜론' 홈페이지는 서버에서 요청이 들어오면 브라우저가 아닌 컴퓨터임을 인지함.(->사람인척 속이면 된다.)
res1 = req.get("https://www.melon.com/", headers = head)
res1

실습 ) 뉴스 타이틀 수집
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
응답을 받은 데이터에서 뉴스 타이틀만 수집.
=  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

- 내가 선택한 하나만 가져옴.

여러개가 필요한 경우 선택자 수정 필요!! 

->  nth-child() 이 부분을 수정해야한당.

'Python' 카테고리의 다른 글

[ Machine Learning ] 머신러닝  (1) 2023.08.24
[Crawling] 음원 순위 데이터 수집  (0) 2023.08.24
[Python] matplotlib  (0) 2023.08.23
[Python] CrimeData 실습  (0) 2023.08.23
[Python] DataFrame 병합  (0) 2023.08.23