https://link.coupang.com/a/b9Vk1g
쨩서나님께서 공유해 주신 내용을 참고했어요.
1. 나와 비슷한 관심사로 글을 작성하고 있는 블로그 ID를 수집하는 코드입니다.
참고로 크롬드라이버가 파이썬 실행파일과 동일한 경로에 있어야 합니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
import csv
import pandas as pd
import pyperclip
service = Service('chromedriver.exe')
driver = webdriver.Chrome(service=service)
# 블로그 ID 수집을 위한 set 초기화 (중복 자동 제거)
blog_id_set = set()
search_keyword = '관심 키워드 입력'
total_pages = 200
for page in range(total_pages):
# URL 생성
search_url = f"https://section.blog.naver.com/Search/Post.naver?pageNo={page}&rangeType=ALL&orderBy=sim&keyword={search_keyword}"
driver.get(search_url)
# 블로그 저자 요소 찾기
authors = driver.find_elements(By.CLASS_NAME, 'author')
# 저자 링크에서 ID 추출
for author in authors:
blog_link = author.get_attribute('href')
if blog_link:
# ID 추출
blog_id = blog_link.split('/')[-1] # 마지막 부분에서 ID 추출
blog_id_set.add(blog_id) # set에 추가하면 중복이 자동으로 제거됨
# 페이지마다 0.1초의 딜레이 추가
time.sleep(0.15)
# set을 리스트로 변환
unique_blog_ids = list(blog_id_set)
# DataFrame으로 변환
id_data = pd.DataFrame(unique_blog_ids, columns=['BlogID']) # 컬럼 이름 추가
# CSV 파일로 저장
id_data.to_csv('naver_blogId_교육.csv', mode='a', header=False, index=False)
# 드라이버 종료
driver.quit()
이 코드는 네이버 블로그에서 특정 키워드로 검색한 결과에서 블로그 ID를 수집하는 웹 크롤링 스크립트입니다. 주요 기능은 다음과 같습니다:
1. Selenium과 BeautifulSoup을 사용하여 웹 페이지를 크롤링합니다.
2. '**'이라는 키워드로 네이버 블로그를 검색합니다.
3. 총 200페이지를 순회하면서 각 페이지의 블로그 저자 정보를 수집합니다.
4. 각 저자의 블로그 링크에서 고유한 블로그 ID를 추출합니다.
5. 중복을 제거하기 위해 set 자료구조를 사용합니다.
6. 수집된 고유한 블로그 ID를 pandas DataFrame으로 변환합니다.
7. 결과를 'naver_blogId_교육.csv' 파일로 저장합니다.
8. 각 페이지 크롤링 사이에 0.15초의 딜레이를 두어 서버에 과도한 부하를 주지 않도록 합니다.
2. 앞에서 블로그 ID를 수집했다면 이제 실제로 서이추하는 파이썬 코드입니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time
from bs4 import BeautifulSoup
import csv
import pandas as pd
import pyperclip
import time
import pickle
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException, TimeoutException, StaleElementReferenceException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import itertools
options = webdriver.ChromeOptions()
# options.add_argument("headless") # 필요시 헤드리스 모드 활성화
service = Service('chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)
wait = WebDriverWait(driver, 2)
counter = itertools.count(start = 1)
# URL 설정
url = "https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/"
driver.get(url)
nid = '*****'
npw = '*****'
# 무한 루프 방지용 변수
login_success = False
while not login_success:
try:
# 아이디 입력
time.sleep(1) # 페이지 로딩 대기
pyperclip.copy(nid)
driver.find_element(By.CSS_SELECTOR, '#id').send_keys(Keys.CONTROL + 'v')
# 비밀번호 입력
time.sleep(1)
pyperclip.copy(npw)
driver.find_element(By.CSS_SELECTOR, '#pw').send_keys(Keys.CONTROL + 'v')
# 로그인 버튼 클릭
driver.find_element(By.XPATH, '//*[@id="log.login"]').click()
# 로그인 성공 여부 확인
time.sleep(2) # 로그인 처리 대기
if driver.current_url == "https://www.naver.com/": # 성공적으로 로그인한 경우
print("로그인 성공")
login_success = True # 로그인 성공
else:
print("로그인 실패. 다시 시도합니다.")
driver.get(url) # 로그인 페이지로 돌아가기
except Exception as e:
print("오류 발생:", e)
break # 오류 발생 시 루프 종료
lists_id = []
data = pd.read_csv(f'naver_blogId_교육.csv', encoding = "ISO=8859-1")
msg = "서이추 메시지 입력"
for i in data:
for j in range(len(data)):
lists_id.append(data[i][j])
s = set(lists_id)
sorted_list_id = list(s)
for i in range(len(sorted_list_id)):
# for i in range(0, 100):
try:
blog_url = "http://m.blog.naver.com/BuddyAddForm.naver?blogId=" + sorted_list_id[i] + "&returnUrl=https%253A%252F%252Fm.blog.naver.com%252F"
driver.get(blog_url)
exceptional_text = WebDriverWait(driver, 3).until(
EC.presence_of_element_located((By.CLASS_NAME, 'dsc'))
).text
if "진행중" in exceptional_text or "제한된" in exceptional_text: # 신청 진행 중인 경우
print("이미 이웃 신청이 진행 중입니다. 다음으로 넘어갑니다.")
continue
checkbox = WebDriverWait(driver, 3).until(
EC.element_to_be_clickable((By.XPATH, '//label[contains(text(), "서로이웃")]/preceding-sibling::input'))
)
if not checkbox.is_enabled():
print("서로이웃 추가가 불가능하여 다음으로 넘어갑니다.")
continue
checkbox.click() # 체크박스 클릭
print("서로이웃 체크박스 클릭 완료")
driver.find_element(By.TAG_NAME, 'textarea').clear()
driver.find_element(By.TAG_NAME, 'textarea').send_keys(msg)
driver.implicitly_wait(5)
print("메세지 작성 완료")
driver.find_element(By.CLASS_NAME, 'btn_ok').click()
print(f"{next(counter)}번째 서이추 완료!")
driver.implicitly_wait(10)
except Exception as e:
print(f"Error: {e} - {sorted_list_id[i]}에 대한 이웃 추가 실패, 다음으로 넘어갑니다.")
continue
driver.quit()
이 코드는 네이버 블로그에서 자동으로 서로이웃을 신청하는 프로그램입니다. 주요 기능은 다음과 같습니다:
1. Selenium을 사용하여 네이버에 자동 로그인합니다.
- 아이디와 비밀번호를 pyperclip을 통해 입력하여 보안을 우회합니다.
- 로그인 성공 여부를 확인하고, 실패 시 재시도합니다.
2. CSV 파일에서 블로그 ID 목록을 읽어옵니다.
- 'naver_blogId_교육.csv' 파일에서 블로그 ID를 불러옵니다.
- 중복을 제거하고 정렬된 리스트를 만듭니다.
3. 각 블로그 ID에 대해 서로이웃 신청을 시도합니다:
- 블로그의 서로이웃 신청 페이지로 이동합니다.
- 이미 신청 중이거나 제한된 경우 다음으로 넘어갑니다.
- 서로이웃 체크박스를 클릭합니다.
- 미리 정의된 메시지를 입력합니다.
- 신청 버튼을 클릭합니다.
4. 예외 처리:
- 각 단계에서 발생할 수 있는 예외를 처리하여 프로그램이 중단되지 않도록 합니다.
- 오류 발생 시 해당 블로그를 건너뛰고 다음으로 진행합니다.
5. 진행 상황을 콘솔에 출력하여 사용자가 모니터링할 수 있게 합니다.
6. 모든 처리가 끝나면 브라우저를 종료합니다.
다만 이 스크립트는 네이버 블로그에서 대량으로 서로이웃을 신청하는 자동화 도구로, 주의해서 사용해야 합니다. 네이버의 이용 약관을 위반할 수 있으며, 계정 제재의 위험이 있습니다.
'파이썬' 카테고리의 다른 글
알고리즘과 순서도: 문제 해결의 핵심 도구 (0) | 2025.01.16 |
---|---|
프로그래밍에서의 변수 (0) | 2025.01.16 |
CTR파이썬 2호 4차시 예제 파일 (0) | 2025.01.09 |
함안 칠원고 토리드론 활용 파이썬 코딩교육 (1) | 2024.12.23 |
파이썬으로 날짜에서 요일 정보 얻기 (1) | 2024.08.30 |