반응형

요약

Ajax요청 Request URL을 url로 지정한다

get요청 보낼 때 headers에 정보를 넣어서 보낸다

headers에는 User-Agent 와 referer 정보를 같이 보낸다

 


이슈 발생

 

평화로운 주말

평화롭게 크롤링 코드를 2시간 정도 걸려서 다 짜고 돌린 후 결과를 확인해봤다

결과를 저장한 csv파일을 불러와서 확인해보는데 ... 

 

50개씩 10페이지를 8개의 장르를 가져와서 총 4,000개인데

중복제거한 값을 출력해보니 359개가 나왔다

처음에는 한 곡이 장르를 여러개를 갖는 경우도 있어서 적게 나온건가? 이것도 재밌는 결과네 하고 좋아했다가

아무리 생각해도 각 장르에 500개씩인데 359개라는게 이상해서 결과를 다시 봤더니

장르의 첫페이지 값이 다른 페이지에도 중복되어서 들어가 있었다

 

 

분명히 get 요청한 url을 주소창으로 들어갔을 때도 값이 잘 나왔다

" 페이지 우클릭 > 페이지 소스보기 " 를 확인해보니 값들이 홈페이지에 보이는 것과 달랐다

동적 페이지였던 것이다😨

 

이걸 어떡하나.. 셀레니움으로 다시 코드를 짜려면 CSS SELECTOR 부분은 복붙하더라도 수정하다보면 2시간은 걸릴 것 같았다

그러던 도중 구글링으로 requests를 이용해서 동적 크롤링 하는 방법을 찾았다 :D

 


해결 방법

 

크롬 개발자도구(F12) - Network 탭을 열어두고 내가 크롤링하고 싶은 페이지 새로고침을 해보면 새롭게 파팍 생긴다 

(예시를 위해 멜론 페이지를 이용했다)

 

XHR이 페이지의 새로고침 없이 데이터를 서버와 주고받는 AJAX이다

Name에 있는 것들을 클릭해서 Response 를 클릭해서 보면 이 요청을 통해 서버에서 어떠한 응답을 받았는지 볼 수 있다

나는 html 정보가 필요했으니 html을 받아오는 요청을 찾았다

 

 

 

그 요청의 Headers를 보면 Request Headers와 Response Headers를 볼 수 있다

요청할때 보낸 헤더와 응답으로 받은 헤더라고 생각하면 된다

 

저기에 있는 Request URL을 복사해서 get요청 보내면 된다

get요청 보낼 때 headers에 User-Agent 정보와 referer 정보를 같이 보내니 원하는 페이지에 나온 결과를 가져올 수 있었다!

 

User-Agent 는 사용자가 접속해있는 브라우저 정보이다

referer는 이전에 머물러 있던 페이지를 나타낸다

 

 

 

url = url 정보
headers ={'User-Agent' : User-Agent 정보,
          'referer': 이전페이지 url}
          
res = requests.get(url, headers = headers)

 

 

User-Agent를 랜덤으로 설정하고 싶다면

!pip install fake_useragent
from fake_useragent import UserAgent

ua = UserAgent().random
headers = {'User-Agent' : ua}

 

 

 

 

 

 


추천 무료 강의

 

크롬 개발자 도구의 사용법을 더 알고 싶다면 밑의 강의를 추천드립니다👍

예전에 들었었는데 두고두고 도움이 되는 것 같습니다

모를땐 정말 어렵지만 알고나면 쉬운 디버깅 도구에요 :D

 

https://school.programmers.co.kr/learn/courses/7/7-%ED%8A%B9%EA%B0%95-%ED%81%AC%EB%A1%AC%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EB%94%94%EB%B2%84%EA%B9%85

 

[특강] 크롬을 활용한 프론트엔드 디버깅

현재 IOS/안드로이드 앱 내에서는 결제를 지원하지 않습니다.

school.programmers.co.kr

 

 


 

 

 

네이버 부스트코스에 있는 무료 강의인데 예전에 스터디로 들었었습니다

여기에서 Ajax와 크롬 개발자 도구를 다루는데 도움이 되었습니다!

 

3. 웹 앱 개발:예약서비스 1/4 > 3. Ajax - FE 

 

https://www.boostcourse.org/web316

 

웹 프로그래밍(풀스택)

부스트코스 무료 강의

www.boostcourse.org

 

반응형
복사했습니다!