본문 바로가기

BLOG/웹크롤링

[웹크롤링] 자바스크립트로 이루어진 페이지와 html로 이루어진 페이지를 크롤링 하는 코드가 다른가요?

1. html로 이루어진 페이지

html로 이루어진 페이지를 크롤링하는 것은 자바스크립트로 이루어진 페이지를 크롤링하는 것과 다르게 코드를 작성해야 하는지 궁금하실 수 있는데요, html로 이루어진 페이지와 자바스크립트로 이루어진 페이지를 크롤링하는 방법은 약간 다르답니다!

 

html로 이루어진 경우 간단하게 url을 찾고 BeautifulSoup()를 이용하여 본문을 가져오면 되는데요,

기본적으로 다음과 같이 코드를 입력하면 됩니다.

 

from bs4 import BeautifulSoup   
import requests

url = "https://www.naver.com/"  

resp = requests.get(url,params)
soup = BeautifulSoup(resp.content, 'lxml')

 

 

2. 자바스크립트로 이루어진 페이지

반면, 자바스크립트 페이지의 경우, URL을 찾는 것부터가 까다로운데요,

F12를 누른 뒤 [Network] 탭에서 "XHR" 또는 "JS" 버튼을 누르며 보여지는 항목들을 클릭해봅니다. 항목들을 미리 보기(Preview) 하면서, 해당되는 영역이 맞다면 "Headers"에서 Request URL 부분을 복사하면 된답니다. 해당 URL을 주소창에 입력하면 자바스크립트로 이루어진 모습을 확인할 수 있습니다. (이와 관련해서 이전 글을 참고해주세요!)

 

한편, url을 가져왔다면 아래와 같이 코드를 작성해줍니다.

 

url = "위에서 찾은 url"
resp = requests.get(url)

 

그리고나서, 해당 자바스크립트 페이지가 json 형식으로 인식될 수 있도록 해야 하는데요, 아래와 같이 작성을 해줌으로써 json 형식의 본문을 가져올 수 있습니다.

 

import json
new_resp = json.loads(resp.text)

 

따라서 코드를 종합해보자면 다음과 같습니다.

 

import json
url = "위에서 찾은 url"
resp = requests.get(url)
new_resp = json.loads(resp.text)

 

 

이렇게 자바스크립트로 이루어진 페이지와 html로 이루어진 페이지의 본문을 가져오는 방법에 대해서 살펴보았는데요, 상당히 많은 페이지에서 자바스크립트가 포함된 영역이나 페이지가 있기 때문에 두 가지 방법 모두 잘 알아두시기 바랍니다 :D