본문 바로가기

셀레니움

HTML 에 포함된 Javascript 태그의 json을 어떻게 크롤링 할까?

반응형

일반적으로 json을 크롤링하기 위해서는 브라우저의 개발자도구에서 NETWORK TAB에서 

응답(resopnse)이 어떻게 오는지 확인하면 이를 사용하여 쉽게  원하는 부분만 크롤링 할 수 있었다.

하지만 응답내용을 찾을 수 없고 HTML에 json이 포함된 내용을 어떻게 크롤링할까 생각을 해보고

여러가지 방법을 사용해보았다. 참고로 셀레니움으로 사용할경우에 잘되지 않았다. (값이 없는 것으로 나옴)

 

먼저 뒤죽박죽한 HTML코드에서 beaurifulsoup를 활용하여 원하는 json이 있는 부분만 추려낸 결과

예시 태그는 다음과 같다.

<script id="__NEXT_DATA__" type="application/json"> json </script>

<script id="__NEXT_DATA__" type="application/json">
"item": {
		"collection":"product",
        "purchaseConditionInfos":null,
        "rank": "1",
        "parenId":123415123"
        "productTitle":"가을에 입기 좋은 트렌치"
        "productPrice": 224000
}
</script>

 

위와 같이 원하는 부분만 추려내기 위해서 사용한 파이썬 코드는 다음과 같다.

r = requests.get(url)
r.encoding='utf-8'
html = r.text

bs4 = BeautifulSoup(html, 'html.parser')
result=bs4.select_one('#__NEXT_DATA__')
result=result.text #결과를 문자열로 변환
dict_result = json.loads(result) #결과를 json 으로 변환

* json.loads()를 사용하기 위해서는 string으로 변환을 해야한다. 그리고 json 파일 형식이 보존되고 있어야 한다.

bs4 → 문자열 → json 방식으로 이루어진다. 이를 dict_reuslt 변수에 할당한다.

 

dict_result 를 사용해보자. 사용예시는 다음과 같다.

dict_result['item']['collection'] #product

 

반응형