- 질문 게시판입니다.
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
|
http://www.genie.co.kr/detail/songInfo?xgnm=1
을 눌렀을 때 뜨는 [Alert "곡 정보가 존재하지 않습니다"]를 처리하는 문제 때문에 셀레니움을 쓰고 있어요 ㅎㅎ 셀레니움을 안 쓸 수 있는 방법이 있는지 더 알아볼게요. 감사합니다 :)
을 눌렀을 때 뜨는 [Alert "곡 정보가 존재하지 않습니다"]를 처리하는 문제 때문에 셀레니움을 쓰고 있어요 ㅎㅎ 셀레니움을 안 쓸 수 있는 방법이 있는지 더 알아볼게요. 감사합니다 :)
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... 더 보기
파라미터가 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">어제보다는 더 좋아질 거야
오늘도 또 내일도
파라미터가 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">어제보다는 더 좋아질 거야
오늘도 또 내일도
제일 좋은 방법은 Melon처럼 API를 제공하는 경우 그걸 갖다가 쓰는 방법일 텐데, 지금 Melon API는 신규 신청이 닫혀있는 모양입니다.
셀레니움 대신에 뷰티풀수프로 긁는 것에 대해서는 다른 분께서 지적하셨으니 패스하고, 제가 제안하고픈 방법은 [한번에 여러 페이지를 동시에 긁어오는 방법]입니다. 찾아보니 concurrent니 multiprocessing이니 방법은 많은 것 같네요. 한번에 4개의 페이지를 긁어오면 속도도 그만큼 빨라지겠죠?
... 더 보기
셀레니움 대신에 뷰티풀수프로 긁는 것에 대해서는 다른 분께서 지적하셨으니 패스하고, 제가 제안하고픈 방법은 [한번에 여러 페이지를 동시에 긁어오는 방법]입니다. 찾아보니 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
셀레니움 대신에 뷰티풀수프로 긁는 것에 대해서는 다른 분께서 지적하셨으니 패스하고, 제가 제안하고픈 방법은 [한번에 여러 페이지를 동시에 긁어오는 방법]입니다. 찾아보니 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
혹시 어려움을 겪고 있으시면 https://beomi.github.io/gb-crawling/ 이런 거 참조해 보라고 할 생각이었는데… 잘 되시는 것 같네요^^
목록 |
|