beautifulsoup 크롤링 예제

By Dave Sanasack, on Aug, 02 2019

사용자 에이전트는 사용 중이던 스크레이퍼에 대한 자세한 정보에 대한 링크와 같은 정보를 제공할 수 있습니다. 스크레이퍼에 대한 페이지에는 사용 중인 정보, 크롤링중인 IP 주소 및 봇이 문제를 일으키는 경우 연락할 수 있는 방법이 포함될 수 있습니다. 당신이 BeautifulSoup을 사용하고 요청하는 경우 당신은 당신의 자신의 모든 작업을 수행할 필요가 – 당신은 처음부터 크롤링 시스템을 구축해야합니다. 더 많은 데이터를 수집하고 CSV 파일을 보다 강력하게 만들어 이 프로젝트에 대한 작업을 계속할 수 있습니다. 예를 들어 각 아티스트의 국적과 연도를 포함할 수 있습니다. 다른 웹 사이트에서 데이터를 스크래핑하기 위해 배운 내용을 사용할 수도 있습니다. 위의 예제에서는 두 개의 태그를 추가했습니다. 태그는 링크이며 브라우저에 다른 웹 페이지에 대한 링크를 렌더링하도록 지시합니다. 태그의 href 속성은 링크가 이동하는 위치를 결정합니다. 요청도 크롤러가 아니므로 요청에는 기능이 없습니다. 그것은 단지 당신이 BeautifulSoup 또는 이와 유사한 사용할 수 있도록 서버에서 데이터를 읽습니다.

이제 find_all 메서드를 사용하여 클래스 또는 ID별로 항목을 검색할 수 있습니다. 아래 예제에서는 클래스 외부 텍스트가 있는 p 태그를 검색합니다. 예를 들어 파이썬 스크립트는 티켓 판매가 온라인 상태가 되면 웹 사이트를 긁어내고 봇을 사용하여 최상의 티켓을 구입할 수 있습니다. 스크립트는 분당 여러 요청을 생성할 수 있으므로 사람보다 훨씬 빠르고 효율적으로 이 작업을 수행할 수 있습니다. 때로는 문서가 주로 UTF-8에 있지만 (다시) 마이크로 소프트 스마트 따옴표와 같은 Windows-1252 문자가 포함되어 있습니다. 이 경우 웹 사이트에 여러 소스의 데이터가 포함될 때 발생할 수 있습니다. UnicodeDammit.detwingle()를 사용하여 이러한 문서를 순수 UTF-8로 전환할 수 있습니다. 간단한 예: 우리는 아름 다운 수프와 함께 웹 스크래핑에 대해 배울 수 있도록이 프로젝트를 하 고 있기 때문에, 우리는 사이트에서 너무 많은 데이터를 가져올 필요가 없습니다., 그래서 우리가 긁어 하고자 하는 아티스트 데이터의 범위를 제한 하자. 따라서 하나의 문자를 선택해 봅시다 – 우리의 예에서 우리는 문자 Z를 선택합니다 – 우리는 다음과 같은 페이지를 볼 수 있습니다 : Scrapy는 실제 크롤러 (또는 거미와 크롤링 네트워크를 구축하는 오히려 프레임 워크)입니다. 그리고 DEPTH_LIMIT 옵션이 있습니다 .parent 특성을 사용 하 고 요소의 부모에 액세스할 수 있습니다. 예제 “세 자매” 문서에서 태그는 태그의 부모: Scrapy는 HTML 을 가져오는 것부터 데이터 처리에 이르기까지 모든 것을 처리하는 완전한 웹 스크래핑 프레임워크입니다. 셀레늄은 예를 들어 여러 페이지 사이를 탐색 할 수 있습니다 브라우저 자동화 도구입니다.</p> <p>이 두 라이브러리는 HTML 데이터를 얻는 데 사용되는 요청보다 가파르고 학습 곡선이 있으며 HTML의 파서로 사용되는 BeautifulSoup을 사용합니다. </p> <div class="comments-block"> <a name="comments"></a> </div> </div> </div> </div> <div class="right-sidebar-768"> </div> </div> <!--end of main-content--> <div class="clear"></div> </div> <!--end of content--> </div> </div> <div class="subscription-plans"> <div class="site-width"> <div class="subscription-plans-head"> <div class="subscription-plans-banner"> <div class="subscription-plans-h1-stars">Subscription Plans</div> <span>For about the price of a latte per month.</span> </div> </div> <div class="subscription-plans-left subscription-plans-footer"> <div style="margin-bottom: 45px;" id="subscription-regular"> <div class="subscription-plans-table"> <a href="#" class="item item-double"> <div class="student"></div> <span class="price"> $5 / month <b>or</b> $55 / year </span> <span class="buy-now"> <span class="buy-now-button" data-id="STUDENT_SUBSCR_MONTHLY">Pay monthly ($5/mo)</span> <span class="buy-now-button" data-id="STUDENT_SUBSCR_YEARLY">Pay yearly ($55/yr)</span> </span> <div class="profession">Student</div> </a> <a href="#" class="item item-double"> <div class="military"></div> <span class="price">$6 / month <b>or</b> $65 / year</span> <span class="buy-now"> <span class="buy-now-button" data-id="MILITARY_SUBSCR_MONTHLY">Pay monthly ($6/mo)</span> <span class="buy-now-button" data-id="MILITARY_SUBSCR_YEARLY">Pay yearly ($65/yr)</span> </span> <div class="profession"> Military <span class="simpleblack"> Active and Veterans</span> </div> </a> <a href="#" class="item item-double"> <div class="retired"></div> <span class="price">$6 / month <b>or</b> $65 / year</span> <span class="buy-now"> <span class="buy-now-button" data-id="RETIRED_SUBSCR_MONTHLY">Pay monthly ($6/mo)</span> <span class="buy-now-button" data-id="RETIRED_SUBSCR_YEARLY">Pay yearly ($65/yr)</span> </span> <div class="profession">Retired</div> </a> <a href="#" class="item item-double"> <div class="working"></div> <span class="price">$7 / month <b>or</b> $75 / year</span> <span class="buy-now"> <span class="buy-now-button" data-id="WORKING_AMERICAN_SUBSCR_MONTHLY">Pay monthly ($7/mo)</span> <span class="buy-now-button" data-id="WORKING_AMERICAN_SUBSCR_YEARLY">Pay yearly ($75/yr)</span> </span> <div class="profession">Working American</div> </a> <a href="#" class="item item-double" data-id="CLINTON_RICH_SUBSCR_YEARLY"> <div class="clinton"></div> <span class="price">$125 / year</span> <span class="buy-now"> <span class="buy-now-button" data-id="CLINTON_RICH_SUBSCR_YEARLY">Pay yearly ($125/yr)</span> </span> <div class="profession">Clinton rich</div> </a> <a href="#" class="item item-double" data-id="TWO_YEARS_SUBSCR"> <div class="two-year"></div> <span class="price">$150</span> <span class="buy-now"> <span class="buy-now-button" data-id="TWO_YEARS_SUBSCR">Pay once in 2 year ($150)</span> </span> <div class="profession">Two-Year Subscription <div class="two-year-includes"> includes FREE PolitcalTilt.com mug with FREE shipping and handling. Allow 2-5 weeks depending on inventory. </div> <div class="clear"></div> </div> </a> </div> </div> <div class="fundraize-button"> <a href="/gift-certificate/" class="gift-certificate"> Gift Subscription </a> <a href="/contact-us/?fund-raising-code=1" class="gift-certificate-fund"> Fund Raising Opportunity <div class="fundraize-code-description"> <p><strong>Politcal<em>Tilt</em>.com</strong> has a program to assist your organization, club or group to raise money by returning 20% of the subscription proceeds back to your organization.</p> <p>Simply encourage your members to sign up for an annual subscription using a <strong>FUNDRAISING CODE</strong> that you create. Each member enters this code in the box provided while creating their login and password after the payment process.</p> <p>Email <strong>Susan@PoliticalTilt.com</strong> to register your <strong>FUNRAISING CODE</strong> and point of contact for your group. <strong>Minimum of 100 Annual Subscribers, No Maximum Limit, Annual Subscriptions Only.</strong></p> <p>Fundraising checks will be issued each January for the pervious calendar year. <strong>Annual subscriptions are not refundable. No refunds of any kind.</strong></p> </div> </a> </div> <div class="clear"></div> </div> <div class="subscription-plans-right"> <a href="#"><img src="http://politicaltilt.com/wp-content/themes/latteboy/images/opera-house.png" alt=""></a> </div> <div class="clear"></div> <div class="just-a-cow just-a-cow-footer"> <img alt="" src="http://politicaltilt.com/wp-content/themes/latteboy/images/cow.png" /> </div> </div> </div> <!--end of subscription-plans--> <div class="footer-buffer"> </div> </div> <!--end of main-wrap--> <div class="footer"> <div class="footer-menu"> <div class="menu"></div> </div> <!--end of footer-menu--> <div class="footer-social"> <span class="follow-us-footer">Follow us on</span> <a href="https://www.facebook.com/dave.latteboy " target="_blank" class="item fb"></a> <a href="https://twitter.com/latteboycom" target="_blank" class="item tw"></a> <a href="https://instagram.com/latteboycom/" target="_blank" class="item instagram"></a> </div> <div class="copyright" style=" bottom: 150px; "> <a href="https://foldermarker.com/en/folder-marker-home/">Change Folder Color</a> <br /> <a href="http://www.icondesignlab.com/en/">Custom Icon Design Service</a><br /> <a href="https://filemarker.net/">change file icon</a><br /> </div> <div class="copyright"> Copyright © 2021 PolitcalTilt.com - All Rights Reserved <br /> Our <a href="/privacy-policy/">Privacy Policy</a> and <a href="/terms-of-service/">Terms of service</a> </div> </div> <!--end of footer--> <div class="b-left-menu"></div> <div class="sign-in-item" id="inline" style="display: none; "> <div class="sign-in-item-h1">Sign in</div> <form action="/wp-login.php" method="post" id="form_login_popup"> <input type="text" value="" name="log" placeholder="Username or email" /> <input type="password" value="" name="pwd" placeholder="Password" /> <br /> <a style="display: block;" href="http://politicaltilt.com/wp-login.php?action=lostpassword" class="forgot-password">Forgot your password?</a> <br /> <input id="rememberme" type="checkbox" value="forever" name="rememberme"> Remember Me <input type="submit" value="Submit"> </form> <div class="sign-in-line"> </div> <div class="sign-in-not-reg">Are you still not registered?</div> <a href="/subscribe-now/" class="subs-now">Subscribe now</a> </div> <script> (function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', 'UA-69350412-1', 'auto'); ga('send', 'pageview'); </script> </body> </html>