일기

2차 팀프로젝트 뉴스 이슈관련

인생진리 2023. 4. 5. 17:28

#크롤링시 필요한 라이브러리 불러오기
from bs4 import BeautifulSoup
import requests
import re
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import urllib  

#웹드라이버 설정
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

def makeUrl(search, page, page2):
    search_urls = []
    base_url = "https://search.naver.com/search.naver?where=news&query="
    search = urllib.parse.quote(search)
    for p in range(page, page2 + 1):
        start = (p - 1) * 10 + 1
        search_url = base_url + search + "&start=" + str(start)
        search_urls.append(search_url)
    return search_urls
#(부동산 건축물대장 사기피해,부동산 등기부등본 사기피해, 부동산 신분증 사기피해,부동산 위임장 사기피해, 후견등기사항 부존재증명서 피해)
#검색어 입력
search = input("검색할 키워드를 입력해주세요:")

#검색 시작할 페이지 입력
page = int(1)
#page = int(input("\n크롤링할 시작 페이지를 입력해주세요. ex)1(숫자만입력):"))
print("\n크롤링할 시작 페이지: ",page,"페이지")   
#검색 종료할 페이지 입력
page2 = int(2)
#page2 = int(input("\n크롤링할 종료 페이지를 입력해주세요. ex)1(숫자만입력):"))
print("\n크롤링할 종료 페이지: ",page2,"페이지")   

# naver url 생성
search_urls = makeUrl(search,page,page2)

## selenium으로 navernews만 뽑아오기##
# 버전에 상관 없이 os에 설치된 크롬 브라우저 사용
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.implicitly_wait(3)

# selenium으로 검색 페이지 불러오기 #
naver_urls=[]

for i in search_urls:
    driver.get(i)
    time.sleep(1) #대기시간 변경 가능

    # 네이버 기사 눌러서 제목 및 본문 가져오기#
    # 네이버 기사가 있는 기사 css selector 모아오기
    a = driver.find_elements(By.CSS_SELECTOR,'a.info')

    # 위에서 생성한 css selector list 하나씩 클릭하여 본문 url얻기
    for i in a:
        i.click()

        # 현재탭에 접근
        driver.switch_to.window(driver.window_handles[1])
        time.sleep(3) #대기시간 변경 가능

        # 네이버 뉴스 url만 가져오기
        url = driver.current_url
        print(url)

        if "news.naver.com" in url:
            naver_urls.append(url)
        else:
            pass
        
        # 현재 탭 닫기
        driver.close()

        # 다시처음 탭으로 돌아가기(매우 중요!!!)
        driver.switch_to.window(driver.window_handles[0])

print(naver_urls)

오류발생

문제해결확인 1)

1
2
3
4
5
6
7
8
9
10
오류발생
1)
NameError                                 Traceback (most recent call last)
Cell In[4], line 38
     35 print("\n크롤링할 종료 페이지: ",page2,"페이지")   
     37 # naver url 생성
---> 38 search_urls = makeUrl(search,page,page2)
     40 ## selenium으로 navernews만 뽑아오기##
     41 # 버전에 상관 없이 os에 설치된 크롬 브라우저 사용
     42 driver = webdriver.Chrome(ChromeDriverManager().install())
cs

해결방안과 이유

문제 확인 1)

1
2
 오류 메시지를 보니 NameError로 urllib 모듈을 불러오지 않았다.
따라서 코드 상단에 urllib 모듈을 import하도록 함
cs