본문 바로가기
bootcamp

[웹크롤링] 웹 크롤링이란?

by AI미남홀란드 2022. 10. 27.
728x90

웹 + 크롤링

웹 = 전세계의 인터넷으로 연결되어 있는 컴퓨터들의 저장 " 공간"

(여기서 웹을 "공간"의 개념으로 이해 할 것)

 

크롤링 = 자유롭게 돌아다니면, 정보를 "수집"하는 행위

 

정보를 수집하는자 

(클라이언트) 서비스 요청

 

정보를 갖고 있는자

(서버) 서비스 제공

 

"크롤러를 만든다는 것은 브라우저를 대신하는 프로그램을 만든다는 것"

 

"브라우저를 통해 우리는 어떻게 웹 상에서 정보를 얻는가?"

 1. 브라우저에 URL을 입력하여 원하는 웹페이지에 접근한다.

 2. 전체 페이지 중에서 원하는 정보를 찾는다.

 

"크롤링해야 하는 데이터는 누구인가"

웹상의 데이터 -> HTML 혹은 JSON

 

HTML 의 핵심정리

1. HTML은 태그들로 이루어졌다.

2. 태그에 정보가 들어가 있다.

3. 태그는 계층적인 구조로 구성되어 있다.

 

최상위 태그 <html>  -> 그아래 <head><body>

<html>      :  시작태그

    <head>...</head>

    <body>...</body>

</html>     : 끝태그

 

 

<h2 class="media_end_head_headline">                <- 태그 속성: 태그의 세부정보를 적어놓는다.

"화면 대폭 키운 16인치 아이패드 내년에 나온다

</h2>

 

<h2>

내년 아이패드 16인치 나온다!

</h2>

태그 = 시작태그 + 하위태그/text + 끝태그

 

 

 

<a herf> 태그

<a herf>  : 하이퍼 텍스트(하이퍼링크 , 파란색글씨, 클릭시 이동)

 

속성 = 태그의  세부정보

이 a 태그는요

1)href 는 "~~~" url 입니다.   

2)class 는 news_tit 입니다.  // 클래스는 뉴스타이틀이다

3)title 은 "오늘부터 18~59세도 ~~" 입니다. // 뉴스 기사의 제목

 

만약 코로나에 관련된 기사를 크롤링 하고 싶다면? 뉴스기사 제목-> href를 가져옴 -> 기사제목도 가져오면 좋음

무엇을 가져와야하는지 알아야 크롤링을 할 수 있다.

어떻게하면 바디태그 중에서 내가 가져오가자 하는 A태그만 가져 올 수 있을까 생각한다.


그럼 웹크롤러 프로그램은 어떻게 만들어야 할까?

 

크롤러를 만든다는 것은 브라우저를 대신하는 프로그램을 만든다.

1. 브라우저의 URL을 입력하여 원하는 페이지를 접근한다.

2. 전체 페이지 중에서 원하는 정보를 찾는다.

 

" 2가지 파이썬 라이브러리가 필요하다 "
1. requests

2. BeautifulSoap

" 그 중 각각 1개의 함수가 필요하다"

1. get(request) : 원하는 웹페이지 정보 가져오기

2. select(BeautifulSoap) : (웹페이지중) 원하는 정보 가져오기

 

// 크롤링은 결국은 2단계다. 웹페이지를 get 한 후 에 원하는 태그만 select 한다 (겟셀렉트)


(1단계)

웹페이지 = requests.get(url)

* url 이해하기

url= 프로토콜// 주소값 /리소스 경로 ? 쿼리스트링

 *쿼리 스트링 : 페이지에대한 세부 정보

 

시행1) 네이버 코로나 뉴스 -1

requests.get(https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%BD%94%EB%A1%9C%EB%82%98)

html = requests.get(해당url)

해당 html이 있기를 기대함.

 

시행2) 네이버 코로나 뉴스 -2

requests.get(https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%BD%94%EB%A1%9C%EB%82%98&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=24&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=11)

 

시행3) 네이버 코로나 뉴스 -3

requests.get(https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%BD%94%EB%A1%9C%EB%82%98&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=83&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=21)

시행 1, 2 차이점은 쿼리스트링만 다르다

start가 10씩 증가하는 모습을 볼수있다. 여기서 규칙을 찾으면된다

서로다른 URL을 여러번 리퀘츠를 해야 한다.

//쿼리스트링안의 세부정보가 보인다, 그 안에서 규칙을 찾는다!

 


(2단계) 

" 웹페이지에서 원하는 정보를 가져오는 것은 해당 태그를 지정해주면 된다 "

 

웹페이지.select(원하는 정보(->태그 지정))

* 태그 이해하기

태그  = <시작태그(이름+속성)> 하위태그 + text </끝태그>

                                                                                (1)                        (2)         (3)    (4)

 

" 이름과 속성을 명시해줌으로써 내가 원하는 태그만 지정해줘야한다"

 

"내가 원하는 태그를 표현할 수 있는 방식은 크게 두가지다"

1️⃣ ~ 한 속성을 가진 태그들 -> 속성

2️⃣ ~ 태그 하위에 있는 태그 -> 계층 구조

 

* 우리가 가져와야 하는 부류의 데이터들은 같은 부류이기에 1️⃣속성 과 2️⃣계층구조 가 같다!

(내가 가져오고자 하는 걸 보면 구조적으로 같은 구조, 위치에 있다)

브라우저 유저 친화적으로 만들었다. 크롤러가 편하게 x

 

 

 

728x90