Web 크롤링/Python Crawling

네이버 헤드라인 뉴스 가져오기 실패 그리고 성공

Link2Me 2021. 6. 22. 08:08
728x90

파이썬을 배우는 중인데 헤드라인 뉴스 가져오기를 시도했는데 실패했다.

실패한 기록도 저장하고, 나중에 더 배우면 그때 해결해보련다. ==> 크롤링 다른 라이브러리를 이용하여 해결

#파이썬 크롤링 기초
# pip install lxml 을 윈도우 cmd 창에서 실행한다.
# pip install --upgrade pip
# pip list
# pip install requests
# pip install cssselect
# pip install bs4 (BeautifulSoup 4)
 
import requests
import lxml.html
 
def main():
    """
    네이버 메인 뉴스 스탠드 스크랩핑 메인 함수
    """
 
    # 세션 사용
    session = requests.Session()
 
    # 스크랩핑 대상 URL (GET, POST)
    response = session.get("https://news.naver.com/")
 
    # 신문사 링크 리스트 획득
    urls = scrape_news_list_page(response)
 
    # 딕셔너리 확인
    #print(urls)
 
    # 결과 출력
    for url in urls:
        # url 출력
        print(url)
        # 파일 쓰기
        # 생략
 
def scrape_news_list_page(response):
    # url 리스트 선언
    urls = {}
 
    # 태그 정보 문자열 저장
    print(response.content)
    root = lxml.html.fromstring(response.content)
    #print(root)
 
    # for a in root.cssselect('#today_main_news > div.hdline_news > ul > li > div > a'):
 
    for a in root.xpath('//div[@class="hdline_news"]/ul[@class="hdline_article_list"]/li/div[@class="hdline_article_tit"]/a[@class="lnk_hdline_article"]'):
        # 링크
        url = a.get('href')
        urls.append(url)
    return urls
 
 
# 스크랩핑 시작
if __name__ == "__main__":
    main()
 
 

 

 

위 방법으로 해결이 안되어서 selenium 으로 실시간 뉴스 가져오는 걸 해결했다.

Update : 2021.6.28(월)

# 네이버 실시간 뉴스 정보 가져오기
# BeautifulSoup은 HTML 과 XML 파일로부터 데이터를 수집하는 라이브러리
# pip install selenium
# pip install chromedriver-autoinstaller 
# pip install bs4
 
from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
 
options = Options()
# options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.add_argument('headless'); # headless는 화면이나 페이지 이동을 표시하지 않고 동작하는 모드
 
# webdirver 설정(Chrome, Firefox 등)
chromedriver_autoinstaller.install()
driver = webdriver.Chrome(options=options) # 브라우저 창 안보이기
# driver = webdriver.Chrome() # 브라우저 창 보이기
 
# 크롬 브라우저 내부 대기 (암묵적 대기)
driver.implicitly_wait(5)
 
# 브라우저 사이즈
driver.set_window_size(1920,1280)
 
# 페이지 이동(열고 싶은 URL)
baseURL = 'https://news.naver.com/'
driver.get(baseURL)
 
soup = BeautifulSoup(driver.page_source, 'html.parser')
headline_new_list = soup.select('ul.hdline_article_list > li')
 
print('-' * 55, end=' ')
print('네이버 실시간 뉴스',end=' ')
print('-' * 55)
for v in headline_new_list:
    # print(v)
    title = v.select_one('div.hdline_article_tit > a').text.strip()
    news_url = v.select_one('div.hdline_article_tit > a').get('href')
    news_url = '{}{}'.format(baseURL,news_url)
    print(title, ', ', news_url)
print('-' * 130)
 

 

crawling_22.py
0.00MB

728x90