정적크롤링 - 나도코딩(1)

do yeon kim·2022년 6월 10일
0

정적크롤링 - 나도코딩

웹스크래핑 vs 웹크롤링

웹페이지 내에서 내가 원하는 데이터를 추출해오는 것이 웹스크래핑이다.
웹크롤링은 특정 웹페이지에서 갈수 있는 모든 링크를 타고 돌아다니면서 모든 내용을 가지고 오는 것이다.

=> 우리가 집중해야하는 것은 웹스크래핑이다.



웹기본

웹은 HTML, CSS, JavaScript로 이루어져있다.
HTML이 집의 구조를 만드는 것이라면, CSS는 집의 구조에 인테리어를, JavaScript는 집을 생동감있게 만드는 것이다.

HTML은 tag의 집합이다.
tag(태그)안에는 attribute(속성), 속성에는 속성값이 있다.
이렇게 속성과 속성값으로 이루어진 태그를 하나의 Element라고 한다.

ex) <input type = "text" value = "아이디를 입력하세요">
input태그안에 type, value 속성이 있고 이들이 하나의 Element를 이룬다



Xpath

HTML은 보통 다수의 Element, 복잡한 Element로 집합이다.
그러다보니 Element의 경로를 알 수 있는 방법도 여러개 있다.

그중 하나로 Xpath는 태그의 경로를 알려준다

Xpath는 크롬 개발자도구를 활용해서 알 수 있다.
ex)/html/body/div/span/a
ex)//*[@id="login] (특정 유닉크한 값이 있다면 )



Requests

웹스크래핑은 웹에서 필요한 정보를 가지고 오는 것이다.
브라우저에서 HTTP통신을 하는 것처럼, HTTP통신을 하기 위한 라이브러리로 Requests가 있다.

Requests라이브러리를 이용해서 우리는 웹페이지에 대한 정보를 가지고 올수 있다.

import requesta as req

url = "https://www.naver.com/"
res = req.get(url) 					#url에 대한 웹페이지 정보를 가지고 온다.

res.status_code						#HTTP통신의 성공여부를 알려준다.

#req.codes.ok 						#위와 같이 성공여부를 알려준다.

res.raise_for_status()				#HTTP통신이 성공했을 경우 pass, 그렇지 않으면 오류를 발생시킨다.


정규표현식

웹스크래핑시 활용될 하나의 방법으로, 문자열에서 특정 문자열을 찾기 위해서 사용하는 방법이다.

정규표현식은 중요하므로 따로 정리하도록 하자.

import re

p = re.compile("") 			#기본 형태이다.
							#p는 pattern을 의미하며, 주로 p가 많이 사용된다.
                            #("")안에는 찾고자 하는, 매칭 시키고자 하는 문자나 문자열, 또는 패턴이 온다.


User-Agent

웹스크래핑시 Requests 라이브러리를 이용해서 웹페이지에 대한 정보를 가지고 오려고 할 때 오류가 발생할 수 있다.
이 경우 웹페이지 내에서 접근하려는 시도를 막은 것이다.

해결 방법 중 하나로 get통신을 할때 User-Agent 정보도 함께보내는 것이다.

what is my User Agent
User Agent를 알려준다.

import requesta as req

headers = {"User-Agent":"User Agent정보"}
url = "https://www.naver.com/"
res = req.get(url, headers = headers) 					

res.status_code						

#req.codes.ok 						

res.raise_for_status()			

User Agent를 보낸다고 해서 문제가 해결되지 않을 수도 있다.
ex)나의 경우 쿠팡에 User Agent를 보냈지만 응답을 받지 못했다.



기본 시작 템플릿

import requests as req
headers = {"User-Agent":"User-Agent정보"}
url = "https://www.google.com/"
res = req.get(url, headers = headers)
res.raise_for_status()

여기에 BeautifulSoup를 추가해주면 준비 완료!!!

0개의 댓글