2024년 9월 24일 화요일

웹 페이지 크롤링

 네이버 뉴스 분야별 기사 제목 모두를 가져와서, 기사 제목에서 불필요한 단어들 제거하고(불용어)

정리된 단어들 빈도 수 분석하여 워드 클라우드로 시각화해줘/

또 데이터베이스 테이블 생성 후 한시간에 한번씩 데이터 자동 저장하는 웹크롤링하는 코드를 셍성해줘

-----------------------------------------------------------------

네이버 뉴스 기사 제목을 크롤링하고, 불필요한 단어를 제거하여 빈도 수 분석 후 워드 클라우드로 시각화하는 작업은 흥미로운 과제입니다! 이를 위해 파이썬과 BeautifulSoup을 사용하여 네이버 뉴스에서 기사 제목을 추출하고, 불용어를 제거한 뒤 빈도 수를 분석하겠습니다. 또한, 데이터베이스 테이블을 생성하고 한 시간마다 데이터를 자동으로 저장하는 웹 크롤링 코드도 작성하겠습니다.


먼저, 네이버 뉴스 기사 제목을 크롤링하는 코드를 보여드리겠습니다. 아래는 파이썬 코드 예시입니다:


Python


# 필요한 라이브러리 임포트

import requests

from bs4 import BeautifulSoup


# 네이버 뉴스 URL 설정

url = "https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=100"


# 페이지 요청

response = requests.get(url)


# HTML 파싱

soup = BeautifulSoup(response.content, "html.parser")


# 기사 제목 추출

titles = soup.select(".cluster_text_headline > a")

for title in titles:

    print(title.text)

AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

이 코드를 실행하면 네이버 뉴스의 최신 기사 제목을 가져올 수 있습니다. 이후 불용어를 제거하고 빈도 수를 분석하여 워드 클라우드로 시각화하는 작업을 추가로 수행하겠습니다. 데이터베이스 테이블 생성과 웹 크롤링 코드도 함께 작성하겠습니다. 


-----------------------------------------------------------------

물론! 웹 크롤링은 다양한 방법으로 구현할 수 있습니다. 여기서는 몇 가지 예제를 소개해 드리겠습니다.


1. **간단한 웹 페이지 크롤링 (Python, BeautifulSoup)**:

    - 이 예제에서는 Python과 BeautifulSoup 라이브러리를 사용하여 웹 페이지에서 특정 데이터를 추출하는 기본적인 크롤링을 구현합니다.

    - 아래는 클리앙 중고장터에서 아이패드 관련 제목을 크롤링하는 코드 예시입니다:

    ```python

    from bs4 import BeautifulSoup

    import urllib.request

    import re


    # User-Agent 설정 (아이폰에서 사용하는 사파리 브라우저의 헤더)

    hdr = {'User-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602.1'}


    for n in range(0, 10):

        # 클리앙 중고장터 주소

        data = 'https://www.clien.net/service/board/sold?&od=T31&po=' + str(n)


        # 웹 브라우저 헤더 추가

        req = urllib.request.Request(data, headers=hdr)

        data = urllib.request.urlopen(req).read()

        page = data.decode('utf-8', 'ignore')

        soup = BeautifulSoup(page, 'html.parser')


        # 제목 추출

        title_list = soup.find_all('span', attrs={'data-role': 'list-title-text'})

        for item in title_list:

            try:

                title = item.text.strip()

                if re.search('아이패드', title):  # 아이패드 관련된 글만 출력

                    print(title.strip())

            except:

                pass

    ```

    이 코드는 클리앙 중고장터에서 아이패드 관련 제목을 크롤링하여 출력합니다.


2. **고급 웹 크롤링 및 데이터 처리 (Java, Jsoup)**:

    - 이 예제에서는 Java와 Jsoup 라이브러리를 사용하여 웹 페이지에서 복잡한 데이터를 추출하는 방법을 다룹니다.

    - 예제 코드는 [여기](https://diyinfo.tistory.com/entry/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-%EC%9B%B9-%EC%82%AC%EC%9D%B4%ED%8A%B8%EC%97%90%EC%84%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EC%88%98%EC%A7%91%ED%95%98%EB%8A%94-%ED%81%AC%EB%A1%A4%EB%A7%81-%EC%98%88%EC%A0%9C)에서 확인하실 수 있습니다.


3. **웹 스크래핑 (Python)**:

    - 웹 스크래핑은 웹 페이지에서 정보를 추출하는 작업을 말합니다. 예를 들어, 검색 엔진의 웹 크롤러가 하는 일도 웹 스크래핑에 해당합니다.

    - 웹 스크래핑에 대한 자세한 내용은 [여기](https://www.snugarchive.com/blog/python-web-scraping/)에서 확인하실 수 있습니다.


4. **Selenium을 이용한 웹 크롤링 (Python)**:

    - Selenium은 웹 자동화 테스트 용도로 개발된 라이브러리로, 실제 브라우저를 사용하여 크롤링하는 특징이 있습니다.

    - 예제 코드와 사용법은 [여기](https://jaeseokim.dev/Python/python-Selenium%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9B%B9-%ED%


원본: Copilot과의 대화, 2024. 6. 23.

(1) [Python] 파이썬 웹 크롤링 하는법 & 간단 예제 - 코딩팩토리. https://coding-factory.tistory.com/998.

(2) 웹 크롤링: 웹 사이트에서 데이터를 수집하는 크롤링 예제.. https://diyinfo.tistory.com/entry/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-%EC%9B%B9-%EC%82%AC%EC%9D%B4%ED%8A%B8%EC%97%90%EC%84%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EC%88%98%EC%A7%91%ED%95%98%EB%8A%94-%ED%81%AC%EB%A1%A4%EB%A7%81-%EC%98%88%EC%A0%9C.

(3) 파이썬 웹 크롤링? 웹 스크래핑 개념과 실습 예제 - Snug Archive. https://www.snugarchive.com/blog/python-web-scraping/.

(4) [python] Selenium을 이용한 웹 크롤링 - 간단 사용법 및 예제. https://jaeseokim.dev/Python/python-Selenium%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-%EA%B0%84%EB%8B%A8-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C/.

(5) undefined. https://www.clien.net/service/board/sold?&od=T31&po=.

(6) undefined. https://blog.naver.com/ldw0811.

(7) github.com. https://github.com/papasmf1/python1006/tree/95bd71150e76bb7313646240e8e1da2ab867f726/%ED%81%B4%EB%A6%AC%EC%95%99%EC%A4%91%EA%B3%A0%EC%9E%A5%ED%84%B0%EA%B2%80%EC%83%89.py.

(8) github.com. https://github.com/yurimkim1/python0802/tree/6e84443a3aabec9db351bf4b68d2340b66ee5796/%ED%81%B4%EB%A6%AC%EC%95%99%EC%A4%91%EA%B3%A0%EC%9E%A5%ED%84%B0%EA%B2%80%EC%83%89.py.

(9) github.com. https://github.com/Jiseon-Park/python0405/tree/251cd8bb7e2ecd27961644ec67c9258af4c4cc76/0408_05_WebData5.py.


----------------------------------------------------------------------

<Project 팀 구성>

1조)유종윤-석성수-윤현우

2조)한량헌-이혜진-박준현

3조)김기현-이지은-윤명현

4조)황도훈-김용철-박세희

5조)정승현-백민규-남정현

6조)정운성-임재준-최수민



<모든 팀이 수행할 공통 Project 과제>

본사와 지사에 동일한 서버를 운영하되 부하를 대비하여 Load Balancer를 사용하며, 접속하는 사용자와 가까운 쪽으로 접속하도록 구성한다

서버들은 Internet에 노출시키지 않으며 회사 도메인(#.cloudshell.kr)을 사용하도록 한다. 가용성을 위해 Server들을 Availability Set을 사용하도록 하며, 원하는 Port만 노출하고 그 외 모든 포트는 차단하도록 한다. VM간의 Name Resolution을 위해 Private DNS를 운영하고 Internet User의 접속을 위해 Public DNS도 운영한다. 안정적인 운영을 위해 Azure Policy 및 Lock 설정도 한다


<팀별로 각각 다른 Project 과제>

Azure AD를 이용하여 회사 개발자들이 Azure Portal을 이용하도록 사용자를 추가하고 보안을 위해서 반드시 MFA 인증을 하도록 한다

각 소주제는 다음과 같다

- Storage 운영

- Web App 운영

- Azure VM 및 On-Premises Folder 백업

- Azure Firewall

- ACR, ACI, AKS

- Cloud 기본


==================================

체험판은 1인당 Public IP를 3개만 사용하는 것의 한계 때문에 두 명의 구독(체험판) 사용


-  www.#.cloudshell.kr로 접속할 때 GSLB인 Traffic Manager를 이용하여 한국 사람은 한국 서버로, 미국 사용자는 미국 서버로 접속하게 하기

- Load Balancer를 사용하여 부하를 분산한다

- Azure 장애를 대비하여 Availability Set을 VM에 배정한다


서울 중부지역

- LB1

- VNet1

- VM1, VM2: Web(80, 443)

- VM3: DB(설치하지 않음: 1433)

** VM은 Linux CentOS

** VM3는 VM1, VM2에서만 접속 허용

** VM1, VM2, VM3는 공인 IP는 없음

** VM들간에는 Private DNS 사용

** Azure Policy(Allowed Location), Tags, Locks 설정하기

** VM의 SLA를 위해서 Availability Set 사용

** VM 관리를 위해서 NAT Port Forwarding 사용

** VM들이 인터넷에 접속하도록 NAT Gateway 사용


미국동부 지역

- LB2

- VNet2

- VM1, VM2: Web(80,443)

- VM3: DB(설치하지 않음: 1433)

** VM은 Windows Server 2022

** VM3는 VM1, VM2에서만 접속 허용

** VM1, VM2, VM3는 공인 IP는 없음

** VM들간에는 Private DNS 사용

** Azure Policy(Allowed Location), Tags, Locks 설정하기

** VM의 SLA를 위해서 Availability Set 사용

** VM 관리를 위해서 NAT Port Forwarding 사용

** VM들이 인터넷에 접속하도록 NAT Gateway 사용


<개별 프로젝트>

-공통: Azure AD에서 사용자 10명 생성, 2개의 그룹, 보안을 위해 MFA 인증 구성


1) Storage 운영: 인증은 Azure Active  Directory

   Blob Storage와 Azure Files 구성

   AAD Group에게 Storage 구성을 위한 RBAC 설정


2) App service에서 웹사이트 구성 후에  

https://www.nginx.com의 index.html 파일 다운로드하여 로컬 Git Server에 업로드하기

   업그레이드를 위해서 SWAP하기

  AAD Group에게 Web App구성을 위한 RBAC 설정 


3) Azure VM 및 로컬 컴퓨터의 Folder를 주기적으로 Backup하기

4) Azure Firewall 및 Application Gateway 구축하기

5) ACR, ACI, AKS

6) Cloud 기본


========================


<Project 산출물>

1. PPT

2. 발표(demo 포함)


PPT를 제작할 때는 세부 상세 내용 및 각 자원에 대한 특징 및 개념을 포함시킨다






댓글 없음:

예정공정표_엑셀프로그램 V41 / 공정관리 무료 프로그램 / 데이터 분석-pinterest 실시간모니터링 샘플

 프리킥 /  https://kr.freepik.com/vectors/%EA%B3%B5%EC%A0%95-%EA%B4%80%EB%A6%AC 1.  통합내역프로그램 다운로드(XCOST professional)   http://xcost.me/bbs/boa...