- 질문 게시판입니다.
Date 18/02/12 21:39:55
Name   호라타래
File #1   크롤링_코드_1.PNG (71.6 KB), Download : 12
File #2   크롤링_코드_2.PNG (80.8 KB), Download : 8
Subject   웹사이트 분석 / 크롤링 관련 질문 있습니닷




http://www.genie.co.kr/detail/songInfo?xgnm=87759645

파이썬을 이용해서 노래 관련된 정보들을 크롤링/분석하려고 해요.

이미지에 나와있듯이

for문을 이용해서 8~9천만개 정도 존재하는 songInfo 페이지를 하나씩 긁어들이게 만들었는데, 이 중 상당수는 빈페이지입니다.

지금과 같은 코드는 시간도 오래 걸리고, 비효율적이라 개선 방안을 고민하는 중이에요.

1) 셀레니움을 이용하지 않아도 Alert 창을 컨트롤 할 수 있나요?

http://www.genie.co.kr/detail/songInfo?xgnm=1

페이지를 눌러보면 보이듯이 Alert창이 뜨기 때문에, 셀레니움을 이용해서 컨트롤을 해주고 있어요. 근데 속도가 상당히 느리더라고요. BeautifulSoup만 써서 정적 스크래핑을 하면 속도가 개선될 듯한데, Alert를 처리할 수 있는 방법이 있을까요? Ajax인지 아닌지도 모르겠네요 ㅋㅋㅋㅋㅋㅋ

2) 지금 코드를 효율화 할 수 있는 방법이 있을까요?

향후 전처리를 염두에 두고 코드를 짜기는 했는데, 이게 효율적인지 아닌지도 감이 안 잡히네요.

3) 구글 크롬 개발자 도구 외에 사이트 구조를 분석할 수 있는 방법이 있을까요?

비어있지 않은 songInfo 페이지를 사전에 파악한 후, 인덱스를 부여해서 for문을 돌리면 훨씬 효율적이지 않을까 싶은데, 구글 크롬 개발자 도구로는 파악을 못하겠습니당

조언 부탁드립니다ㅠㅠ 영어 사이트여도 활용 가능하니 힌트/키워드라도 얻을 수 있다면 흑흑...

맞다. 제 작업 환경은 램 4G, CPU 2.93Ghz, winddow7, Anaconda3(32bit) - Jupyter notebook - Python 3.6입니다. 설날 전까지는 이 환경에서 작업을 해야 해요. 코드 정리되고 나면 프롬프트 창에서 파이썬을 돌리려고요 8ㅅ8



0


결국에는 셀레니움을 사용하여 처리하는 방식과 유사한 방식이어야 할테니 속도문제의 비약적 개선은 어렵지 않을까 싶어요. 그래서 API와 같이 데이터 제공을 목적으로 한 별도의 장치가 필요한거죠. 사용자를 위해 열어놓은 수단을 봇이 사람인척 하며 접근해서 크롤링을 하고자하면 셀레니움의 방식이 최선이라 생각합니다.
파이썬으로 데이터 긁어오는거 편리하고 깔끔하네요 ㅎㅎ
저도 배워야겠습니다.
호라타래
으앙 토비니뮤가 희망의 한 축이었는데...
빈페이지까지 긁어오느라 시간이 많이 걸리는거라면 빈페이지인지의 여부를 확인하고 빈페이지인 경우 스킵하는 조건문을 하나 두는게 좋겠네요.
호라타래
조언 감사합니다.

Try 구문 실행 -> 오류가 발생하면 Except에 있는 구문을 실행

하는 방식이기는 해요. 빈페이지는 자동으로 스킵! 다만 이 과정에서 alert 창이 뜨는 페이지(빈페이지)를 skip하는 과정이 셀레니움을 통해 이루어기에 시간이ㅠㅠ 다른 방식으로 빈페이지를 스킵하는 방식이 있을지도 생각해볼게요.
revofpla
전문분야가 아니긴 한데 예전에 심심풀이로 파이썬 웹크롤러 만들 때를생각해보면

response = urllib2.urlopen(URL)
page_source = response.read()

같은 형식으로 하면 웹소스를 그대로 가져왔던것으로 기억합니다. 굳이 셀레니움을 써서 웹브라우저를 컨트롤 할 이유가 있지 않다면 여기에 BeautifulSoup써서 돔 객체 파싱하면 될거같은데요?
호라타래
http://www.genie.co.kr/detail/songInfo?xgnm=1

을 눌렀을 때 뜨는 [Alert "곡 정보가 존재하지 않습니다"]를 처리하는 문제 때문에 셀레니움을 쓰고 있어요 ㅎㅎ 셀레니움을 안 쓸 수 있는 방법이 있는지 더 알아볼게요. 감사합니다 :)
revofpla
alert 수행 여부와 상관이 있나요? 어짜피 source를 긁어오는데는 전혀 문제가 없는 것 같은데요?
파라미터가 1번인 경우에 긁으나, 비어있지 않은 것을 긁으나 소스를 가져와서 파싱하는것은 가능한 것 같습니다.

-----------------------------------------이게 1번
3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
Python Type "help", "copyrigh... 더 보기
alert 수행 여부와 상관이 있나요? 어짜피 source를 긁어오는데는 전혀 문제가 없는 것 같은데요?
파라미터가 1번인 경우에 긁으나, 비어있지 않은 것을 긁으나 소스를 가져와서 파싱하는것은 가능한 것 같습니다.

-----------------------------------------이게 1번
3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
Python Type "help", "copyright", "credits" or "license" for more information.
[evaluate untitled-1.py]

[omitting some output]
</div>
</div>
<script type="text/javascript">
//<![CDATA[
var badgeRolling = new ROLLING();
badgeRolling.option = ~{
arrow:true,
arrowParent:$('#badge-navi'),
number:false,
displayNum:4
};
badgeRolling.hook = $('#badge-roll');
badgeRolling._load();
//]
]
>
</script>
<!-- Call fnCreatePlayCnt("song",iSongID) -->
<div class="total">
<div>
<p>
0
</p>
<span>
<img alt="전체 청취자수" src="//image.genie.co.kr/imageg/web/detail/tit_total_listener.gif"/>



-------------------------이게 8어쩌구저쩌구
3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
Python Type "help", "copyright", "credits" or "license" for more information.
[evaluate untitled-1.py]

[omitting some output]
<div class="lyrics-area">
<!-- S. tit-box-->
<div class="tit-box">
<h3>
<img alt="가사" src="//image.genie.co.kr/imageg/web/title/h3_lyrics.gif"/>
</h3>
<div class="btn-agn">
<!--<span><a href="#" class="def-btn radius">아티스트 담기</a></span>-->
<span>
<a class="def-btn radius" href="#" onclick="allSelect('#pLyrics');return false;">
전체선택
</a>
</span>
<span>
<a class="def-btn radius" href="#" onclick="window.print();return false;">
프린트
</a>
</span>
</div>
<pre>
<div>Wild Dream - 02:16</div>
<p id="pLyrics">어제보다는 더 좋아질 거야
오늘도 또 내일도
호라타래
맞아요. 말씀해주시는 내용이 맞는 듯해요! 처음부터 셀레니움 안 쓰고 긁어봤어야 했는데 멍충멍충... 감사합니다. 복 받으실 거예요 8ㅅ8
호라타래
생각을 해보니 굳이 셀레니움을 안 써도 될 것 같기는 해요. Alret 창이 Ajax는 아니었던 듯한데 흐음...
동의합니다.
April_fool
제일 좋은 방법은 Melon처럼 API를 제공하는 경우 그걸 갖다가 쓰는 방법일 텐데, 지금 Melon API는 신규 신청이 닫혀있는 모양입니다.
셀레니움 대신에 뷰티풀수프로 긁는 것에 대해서는 다른 분께서 지적하셨으니 패스하고, 제가 제안하고픈 방법은 [한번에 여러 페이지를 동시에 긁어오는 방법]입니다. 찾아보니 concurrent니 multiprocessing이니 방법은 많은 것 같네요. 한번에 4개의 페이지를 긁어오면 속도도 그만큼 빨라지겠죠?

... 더 보기
제일 좋은 방법은 Melon처럼 API를 제공하는 경우 그걸 갖다가 쓰는 방법일 텐데, 지금 Melon API는 신규 신청이 닫혀있는 모양입니다.
셀레니움 대신에 뷰티풀수프로 긁는 것에 대해서는 다른 분께서 지적하셨으니 패스하고, 제가 제안하고픈 방법은 [한번에 여러 페이지를 동시에 긁어오는 방법]입니다. 찾아보니 concurrent니 multiprocessing이니 방법은 많은 것 같네요. 한번에 4개의 페이지를 긁어오면 속도도 그만큼 빨라지겠죠?

http://jacobbridges.github.io/post/web-scraping-threads-and-queues/
http://www.gregreda.com/2016/10/16/asynchronous-scraping-with-python/
https://blog.miguelgrinberg.com/post/easy-web-scraping-with-python
호라타래
캄사하무니다 +_+ 오늘 하루 맛점맛저 + 자유로운월도 + 뛰어난성과 + 칼퇴하시기를 바랍니다!
제가 드린 답변은 함정카드였군요 ㅎㅎ

동적 조작이 필요한 케이스가 아니라면 기다리는 동작없이 로딩 직후에 바로 페이지를 파싱 할 수 있는 수단을 사용하시는게 훨씬 빠르겠네요.
호라타래
아니요. 말씀하신 답변도 맞아요. 한창 코드 짜는 중입니다 +_+ 완성하면 댓글로 올릴게요.
호라타래

멀티쓰레드도 알아보는 중입니당
호라타래

14초에 100개까지 줄였어요. 감사합니다 ㅎㅎ
April_fool
혹시 어려움을 겪고 있으시면 https://beomi.github.io/gb-crawling/ 이런 거 참조해 보라고 할 생각이었는데… 잘 되시는 것 같네요^^
호라타래
몇 시간 헤메기는 했지만 꾸역꾸역 뚫었어요 ㅎㅎ
목록
번호 제목 이름 날짜 조회 추천
2787 연애여자의 애매한 말. 무슨 뜻일까요? 10 호랑이 17/05/17 3264 0
10887 진로M자형 탈모 증세 완화에 좋은 약이 있을까요? 13 호라타래 21/01/24 4868 1
10759 기타가는 직모 뿌리볼륨 질문입네당 7 호라타래 21/01/03 4258 0
9661 의료/건강정신과 추천 받습니다! 3 호라타래 20/06/25 3240 0
8805 과학통계 수학 질문입니당 3 호라타래 20/02/17 4332 0
8676 경제뉴욕 - 인천 비행기 문의입니다. 6 호라타래 20/01/26 3599 0
6861 기타교수님들 선물 관련 질문입니다. 15 호라타래 19/03/30 3981 0
6178 의료/건강의학계 관련 통계표 해석 질문입니당 16 호라타래 18/12/28 4321 0
5675 진로대학 입학 면접 볼 때 팁이 있을까요? 26 호라타래 18/10/17 2916 0
5566 의료/건강이거 마셔도 되는 술인가요? 16 호라타래 18/10/01 4233 0
4154 IT/컴퓨터웹사이트 분석 / 크롤링 관련 질문 있습니닷 22 호라타래 18/02/12 7453 0
3963 기타다단계 대응책 질문 및 확인입니다. 12 호라타래 18/01/08 2831 0
3838 연애이대 근처에 부모님께서 식사할 만한 곳 있을까요? 13 호라타래 17/12/13 5381 0
2949 진로고 1 학생 진학 관련 조언을 구합니다! 12 호라타래 17/06/24 3883 0
2755 기타문장 수정 질문입니다. 20 호라타래 17/05/07 3973 0
2577 기타건설사 근무로 중동 파견 나가는 형에게 어떤 선물이 좋을까요? 8 호라타래 17/03/29 6481 0
13588 기타타이밍이 안 맞아서 헤어졌습니다.. 18 호가든체리 22/07/05 5002 0
5108 기타‘서점에서 책한권 다읽기’ 어떻게 생각하세요? 11 현타247 18/07/21 6350 0
13714 IT/컴퓨터컴퓨터 구매질문입니다. 4 현운월 22/08/05 3204 0
12749 체육/스포츠런닝&운동용 마스크 추천부탁드립니다. 3 현운월 21/12/28 3899 0
7831 의료/건강다리저림(허리디스크?) 질문드립니다. 4 현상 19/09/08 4573 0
16544 여행여행지 반려동물 숙소를 쉽게 검색할 수 있을까요 2 헬리제의우울 25/02/16 559 0
16383 의료/건강발등이 저립니다 9 헬리제의우울 24/12/15 1122 0
16351 의료/건강닭가슴살 드시는분 있나요 9 헬리제의우울 24/12/05 1068 0
15777 경제재테크 알못이 질문드립니다 11 헬리제의우울 24/04/17 2114 0
목록

+ : 최근 2시간내에 달린 댓글
+ : 최근 4시간내에 달린 댓글

댓글