DeseoDeSeo
[Crawling] Request 사용법 본문
req : 파이썬에서 브라우저의 역할을 대신 함.
클라이언트(사용자) : 특정url에 정보를 요청
서버(웹페이지) : 요청받은 값에 대한 정보를 클라이언트에게 제공
- > 이미지, 동영상, 글자,화면이 html문서로 넘어옴.
( Python의 requests가 하는 건 중간에 넘어오고 있는 html문서 가져오기)
import requests as req
- req 를 통해서 네이버 정보를 요청 ( 괄호 안에는 매개변수 = 무엇을 가지고 올지 적음)
- 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 |