MS 빙챗(Bing Chat)으로 RPA 파이썬 코드 짜기
MS 빙의 채팅 승인을 받아서 아래와 같이 요청해 보았습니다..
"매일 주기적으로 네이버와 구글에서 특정 키워드로 크롤링을 하는 RPA 코드를 파이썬으로 짜주세요"
답변은.....
파이썬으로 크롤링을 하는 RPA 코드를 짜려면, 다음과 같은 라이브러리가 필요합니다.
requests: 웹 페이지에 접속하고 HTML 소스를 가져오는 라이브러리입니다.
BeautifulSoup: HTML 소스를 파싱하고 원하는 정보를 추출하는 라이브러리입니다.
selenium: 웹 브라우저를 제어하고 동적인 웹 페이지를 크롤링하는 라이브러리입니다.
schedule: 주기적으로 코드를 실행할 수 있게 해주는 라이브러리입니다.
다음은 이러한 라이브러리들을 사용하여 네이버와 구글에서 특정 키워드로 크롤링을 하는 RPA 코드의 예시입니다. 이 코드는 매일 오전 10시에 실행되며, 검색 결과의 제목과 링크를 csv 파일로 저장합니다.
# 필요한 라이브러리 임포트
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import csv
import schedule
import time
# 크롤링할 키워드 리스트
keywords = ["빙", "RPA", "파이썬"]
# 네이버에서 키워드 검색하고 결과 크롤링하는 함수 정의
def naver_crawling(keyword):
# 네이버 검색 URL 생성
url = f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}"
# requests 모듈로 URL에 접속하고 HTML 소스 가져오기
response = requests.get(url)
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.text, "html.parser")
# 검색 결과의 제목과 링크가 있는 태그들 찾기
articles = soup.select("ul.list_news > li > div.news_area > a")
# 결과를 저장할 리스트 생성
result = []
# 각 태그에서 제목과 링크 추출하기
for article in articles:
title = article.text # 제목은 태그의 텍스트 부분에 있음
link = article["href"] # 링크는 태그의 href 속성에 있음
result.append([title, link]) # 제목과 링크를 리스트로 만들어 result에 추가하기
return result
# 구글에서 키워드 검색하고 결과 크롤링하는 함수 정의 (selenium 사용)
def google_crawling(keyword):
# 구글 검색 URL 생성 (q는 쿼리 파라미터)
url = f"https://www.google.com/search?q={keyword}"
# selenium을 위한 웹 드라이버 설정 (Chrome 사용)
options = webdriver.ChromeOptions()
# headless 옵션: 실제로 창을 열지 않고 백그라운드에서 작업 수행 가능
options.add_argument("headless")
# user-agent 옵션: 서버가 클라이언트가 어떤 환경인지 알 수 있도록 정보 전달
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36")
# 드라이버 객체 생성
driver = webdriver.Chrome(options=options)
# URL에 접속하기
driver.get(url)
# BeautifulSoup 객체 생성
soup = BeautifulSoup(driver.page_source, "html.parser")
# 검색 결과의 제목과 링크가 있는 태그들 찾기
articles = soup.select("div.g > div.tF2Cxc > div.yuRUbf > a")
라고 나오네요..내일 개발자들과 코드 테스트해 봐야 할 거 같습니다...