
요약
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
[특강] 크롬을 활용한 프론트엔드 디버깅
현재 IOS/안드로이드 앱 내에서는 결제를 지원하지 않습니다.
school.programmers.co.kr
네이버 부스트코스에 있는 무료 강의인데 예전에 스터디로 들었었습니다
여기에서 Ajax와 크롬 개발자 도구를 다루는데 도움이 되었습니다!
3. 웹 앱 개발:예약서비스 1/4 > 3. Ajax - FE
https://www.boostcourse.org/web316
웹 프로그래밍(풀스택)
부스트코스 무료 강의
www.boostcourse.org
'에러정리' 카테고리의 다른 글
맥북 'Docker.app'은(는) 손상되었기 때문에 열 수 없습니다. (5) | 2025.01.08 |
---|---|
안드로이드 스튜디오 패키지명 변경 (0) | 2024.02.13 |
No serializer found for class 오류 해결 (0) | 2023.03.05 |
IntelliJ 콘솔창 인코딩 한글 깨짐 문제 해결 (0) | 2023.01.30 |
타입스크립트 설치 오류 (0) | 2022.11.13 |