단순한 페이지 1개 크롤링은 성공했지만 100개 링크 크롤링은 실패했습니다.
어디서 잘 못된건지 아직도 혼란스럽네요 ㅠㅠ
vod영상을 돌려보아도 어디서 어떻게 잘 못된건지 조차 진단이 안되요.
우선 공유해주신 트라필라투라로 크롤링 기초 실습 노션을 보고 따라했습니다.
[페이지 크롤링]>성공
1. 터미널에 pip install trafilatura 입력
chat gpt가 짜준 코드 실행>성공
[네이버 스포츠 웹페이지 기사 100개 페이지 크롤링 도전]>실패
( https://sports.news.naver.com/wbaseball/index )
1.pip install requests beautifulsoup4 trafilatura 설치
파이썬 코드 작성
import requests
from bs4 import BeautifulSoup
import trafilatura
# 헤드라인 뉴스 링크를 크롤링하는 함수
def get_headline_links(url):
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
# 헤드라인 뉴스 링크 선택자
links = soup.select('.headline_list a')
headline_links = ['https://sports.news.naver.com' + link['href'] for link in links if link['href'].startswith('/news?oid')]
return headline_links
else:
print("페이지를 불러오는데 실패했습니다.")
return []
# URL에서 텍스트 를 크롤링하는 함수
def extract_text_from_url(url):
downloaded = trafilatura.fetch_url(url)
if downloaded:
result = trafilatura.extract(downloaded)
return result
else:
print(f"{url}에서 콘텐츠를 다운로드하는데 실패했습니다.")
return None
# 메인 실행 부분
headline_url = 'https://sports.news.naver.com/wbaseball/index'
headline_links = get_headline_links(headline_url)
for link in headline_links:
print(f"크롤링 중: {link}")
text = extract_text_from_url(link)
if text:
print(text)
print("\n" + "="*80 + "\n")
첫번째 크롤링했던 결과값이 나옴.
아래 메인 실행 부분이 잘 안됬나 싶어 CHAT GPT에게 도움요청.
헤드라인 뉴스 URL을 지정하고, get_headline_links 함수를 사용하여 링크를 크롤링합니다.
각 링크에 대해 extract_text_from_url 함수를 호출하여 텍스트를 추출하고 출력합니다.
새 코드를 짜줌
import requests
from bs4 import BeautifulSoup
import trafilatura
# 헤드라인 뉴스 링크를 크롤링하는 함수
def get_headline_links(url):
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
# 헤드라인 뉴스 링크 선택자
links = soup.select('.headline_list a')
headline_links = ['https://sports.news.naver.com' + link['href'] for link in links if link['href'].startswith('/news?oid')]
return headline_links
else:
print("페이지를 불러오는데 실패했습니다.")
return []
# URL에서 텍스트를 크롤링하는 함수
def extract_text_from_url(url):
downloaded = trafilatura.fetch_url(url)
if downloaded:
result = trafilatura.extract(downloaded)
return result
else:
print(f"{url}에서 콘텐츠를 다운로드하는데 실패했습니다.")
return None
# 메인 실행 부분
def main():
headline_url = 'https://sports.news.naver.com/wbaseball/index'
headline_links = get_headline_links(headline_url)
for link in headline_links:
print(f"크롤링 중: {link}")
text = extract_text_from_url(link)
if text:
print(text)
print("\n" + "="*80 + "\n")
if name == '__main__':
main()
새 코드에도 여전히 첫번째 크롤링 결과값이나옴.