1부에 이어 이번에는 네이버뉴스 기사 본문 내용을 수집하겠습니다.
https://datawithyong.tistory.com/6
1부에서 수집한 각 링크로 다시 requests 요청 진행해서 기사 내용을 수집합니다.
for article in articles:
links = article.select('a.info')
if len(links) == 2:
url = links[1].attrs['href']
response_article = requests.get(url)
html = response_article.text
soup = BeautifulSoup(html, 'html.parser')
print(soup)
* 만약 다음과 같은 오류가 날 경우
Connection aborted
해결법: headers = {'User-Agent' : 'Mozila/5.0'} 옵션을 추가한다.
for article in articles:
links = article.select('a.info')
if len(links) == 2:
url = links[1].attrs['href']
response_article = requests.get(url, headers={'User-agent': 'Mozila/5.0'})
html = response_article.text
soup = BeautifulSoup(html, 'html.parser')
print(soup)
이중 기사 1개 본문으로 들어가봅시다!
예시: https://n.news.naver.com/mnews/article/092/0002301675?sid=105
반복문 적용:
for article in articles:
links = article.select('a.info')
if len(links) == 2:
url = links[1].attrs['href']
response_article = requests.get(url, headers={'User-agent': 'Mozila/5.0'})
html = response_article.text
soup = BeautifulSoup(html, 'html.parser')
content = soup.select_one('#newsct_article')
print(content.text)
안정적으로 수집하기 위해 시스템의 '잠시 멈춤'을 사용!
import time
for article in articles:
links = article.select('a.info')
if len(links) == 2:
url = links[1].attrs['href']
response_article = requests.get(url, headers={'User-agent': 'Mozila/5.0'})
html = response_article.text
soup = BeautifulSoup(html, 'html.parser')
content = soup.select_one('#newsct_article')
print(content.text)
time.sleep(0.3) # 0.3초 잠시 멈춤
이렇게 하여 본문을 수집할 수 있겠습니다!
다만!!
크롤링 제1원칙은 같은 종류의 사이트에 대한 반복적 수집이 제일 주요 포인트입니다!
그런데 네이버 연예 뉴스기사 또는 스포츠 기사는 형태가 조금 달라보입니다.
예시:
'일반' 네이버뉴스:
네이버 연예 기사:
https://entertain.naver.com/home
네이버 스포츠 기사:
https://sports.news.naver.com/index
------------------
크롤링 제2원칙: 사이트가 다른 경우 조건문을 추가하여 '통일' 시키자
- 예시: 만약 OO 형태 URL 이면 OO CSS 선택자 사용, 그게 아니면 OOO CSS 선택자 사용!
'데이터분석' 카테고리의 다른 글
네이버 뉴스 본문 크롤링 - 3부: 본문 내용 크롤링 고도화 (0) | 2023.08.13 |
---|---|
네이버 뉴스 본문 크롤링 - 1부: 본문 링크 출력 (0) | 2023.08.13 |
KB 국민은행 제5회 Future Finance A.I. Challenge (0) | 2023.08.12 |