웹 스크래핑은 웹사이트에서 데이터를 수집하는 강력한 도구입니다. 제품 리뷰를 수집하든, 가격을 추적하든, 아니면 우리의 경우 Goodreads 도서를 스크랩하든 웹 스크래핑은 데이터 기반 애플리케이션에 대한 무한한 기회를 제공합니다.
이 블로그 게시물에서는 웹 스크래핑의 기본 사항과 Python BeautifulSoup 라이브러리의 강력한 기능을 살펴보고 Goodreads Choice Awards 데이터를 스크래핑하도록 설계된 Python 스크립트를 분석해 보겠습니다. 마지막으로 추가 분석이나 적용을 위해 이 데이터를 CSV 파일에 저장하는 방법에 대해 논의하겠습니다.
Goodreads란 무엇인가요?
Goodreads는 독자와 도서 추천을 제공하는 세계 최대 규모의 플랫폼입니다. 이는 사용자에게 서평, 저자 세부정보 및 인기 순위에 대한 액세스를 제공합니다. 매년 Goodreads는 독자들이 소설, 판타지, 로맨스 등 다양한 장르에 걸쳐 자신이 좋아하는 책에 투표하는 Goodreads Choice Awards를 개최합니다. 따라서 Goodreads는 인기 도서 및 작가에 대한 통찰력을 수집하기 위한 웹 스크래핑의 이상적인 대상이 됩니다.
웹 스크래핑에는 자동화된 방식으로 웹사이트에서 데이터를 추출하는 작업이 포함됩니다. 이를 통해 다음과 같은 작업에 대한 정보를 수집하고 구조화할 수 있습니다.
스크립트를 시작하기 전에 필요한 라이브러리를 설치해야 합니다.
파이썬 설치
시스템에 Python이 설치되어 있는지 확인하세요.
필수 라이브러리 설치
pip를 사용하여 필수 라이브러리를 설치합니다.
pip install beautifulsoup4 pip install requests
요청: HTTP 요청을 URL로 보내고 웹페이지 콘텐츠를 검색할 수 있습니다.
BeautifulSoup: HTML 구문 분석 및 데이터 추출을 단순화합니다.
설치가 완료되면 스크래핑할 준비가 된 것입니다!
BeautifulSoup은 HTML 및 XML 문서를 구문 분석하기 위한 Python 라이브러리입니다. 이를 통해 개발자는 페이지 구조를 탐색하고, 콘텐츠를 추출하고, 원시 HTML을 구조화된 형식으로 변환할 수 있습니다.
BeautifulSoup의 주요 메소드
다음은 스크립트에서 사용할 몇 가지 필수 방법입니다.
전체 메소드 목록을 보려면 BeautifulSoup 문서를 확인하세요.
우선 브라우저를 모방하기 위해 필요한 라이브러리를 가져오고 사용자 정의 헤더를 정의해 보겠습니다. 이렇게 하면 웹사이트가 차단되는 것을 방지할 수 있습니다.
pip install beautifulsoup4 pip install requests
Goodreads’ Choice Award 페이지와 기본 애플리케이션의 URL을 정의하는 것부터 시작합니다. start_url에 요청을 보내고 웹페이지 콘텐츠를 가져옵니다.
from bs4 import BeautifulSoup as bs import requests import re import csv HEADERS = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64)...", "Accept-Language": "en-US, en;q=0.5", }
각 카테고리에는 장르와 해당 페이지에 대한 링크가 포함되어 있습니다. Soup.select를 사용하여 .category 클래스에 나열된 모든 카테고리를 추출합니다.
다음으로 각 카테고리를 반복하여 장르 이름과 페이지 URL을 가져옵니다.
app_url = "https://www.goodreads.com" start_url = "https://www.goodreads.com/choiceawards/best-books-2024" res = requests.get(start_url, headers=HEADERS) soup = bs(res.text, 'html.parser') categories = soup.select('.category')
여기서 추가 처리를 위해 카테고리 이름(장르)과 카테고리 페이지 URL을 추출합니다.
각 Category_url에 또 다른 요청을 보내고 해당 카테고리에 속한 모든 도서를 찾습니다.
for index, category in enumerate(categories): genre = category.select('h4.category__copy')[0].text.strip() url = category.select('a')[0].get('href') category_url = f"{app_url}{url}"
category_books에는 해당 카테고리에 속한 모든 도서 목록이 포함됩니다.
책 목록이 확보되면 각 책을 반복하여 데이터를 추출합니다.
투표 추출
res = requests.get(category_url, headers=HEADERS) soup = bs(res.text, 'html.parser') category_books = soup.select('.resultShown a.pollAnswer__bookLink')
DOM을 보면 카테고리 요소의 상위 요소에 투표 횟수가 표시되어 있습니다. 따라서 find_parent 메소드를 사용하여 요소를 찾고 투표수를 추출해야 합니다.
도서 제목, 저자 및 이미지 URL 추출
for book_index, book in enumerate(category_books): parent_tag = book.find_parent(class_='resultShown') votes = parent_tag.find(class_='result').text.strip() book_votes = clean_string(votes).split(" ")[0].replace(",", "")
각 도서의 URL, 표지 이미지 URL, 제목, 저자가 추출됩니다.
clean_string 함수는 제목의 형식을 깔끔하게 유지합니다. 스크립트 상단에서 정의할 수 있습니다
book_url = book.get('href') book_url_formatted = f"{app_url}{book_url}" book_img = book.find('img') book_img_url = book_img.get('src') book_img_alt = book_img.get('alt') book_title = clean_string(book_img_alt) print(book_title) book_name = book_title.split('by')[0].strip() book_author = book_title.split('by')[1].strip()
도서 세부정보 더 추출
평점, 리뷰 등 책에 대한 자세한 내용을 확인하기 위해 book_url_formatted에 또 다른 요청을 보내드리겠습니다.
def clean_string(string): cleaned = re.sub(r'\s+', ' ', string).strip() return cleaned
여기서 get_atings_reviews는 올바른 형식의 평점 및 리뷰 텍스트를 반환합니다.
이 기능은 스크립트 상단에서 정의할 수 있습니다.
pip install beautifulsoup4 pip install requests
각 도서의 세부정보 페이지로 이동하면 평점, 리뷰, 자세한 설명과 같은 추가 정보가 추출됩니다. 여기서는 책 설명 요소가 존재하는지 확인하고 그렇지 않으면 스크립트가 실패하지 않도록 기본 설명을 입력합니다.
from bs4 import BeautifulSoup as bs import requests import re import csv HEADERS = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64)...", "Accept-Language": "en-US, en;q=0.5", }
여기서 저자 세부정보, 출판 정보, 기타 메타데이터도 수집했습니다.
책 사전 만들기
책에 대해 추출한 모든 데이터를 사전에 저장해 보겠습니다.
app_url = "https://www.goodreads.com" start_url = "https://www.goodreads.com/choiceawards/best-books-2024" res = requests.get(start_url, headers=HEADERS) soup = bs(res.text, 'html.parser') categories = soup.select('.category')
이 사전을 사용하여 csv 파일에 데이터를 추가합니다.
파이썬 표준 라이브러리의 일부인 csv 모듈을 사용하겠습니다. 그래서 따로 설치할 필요가 없습니다.
먼저 이것이 첫 번째 항목인지 확인해야 합니다. csv 파일의 첫 번째 행에 헤더를 추가하려면 이 확인이 필요합니다.
for index, category in enumerate(categories): genre = category.select('h4.category__copy')[0].text.strip() url = category.select('a')[0].get('href') category_url = f"{app_url}{url}"
header 항목이 포함된 새 csv 파일을 생성하는 mode="w"를 사용하고 있습니다.
이제 모든 후속 항목에 대해 데이터를 CSV 파일에 추가합니다.
res = requests.get(category_url, headers=HEADERS) soup = bs(res.text, 'html.parser') category_books = soup.select('.resultShown a.pollAnswer__bookLink')
mode="a"는 데이터를 CSV 파일에 추가합니다.
이제 대본이 실행되는 동안 편히 앉아 커피 한 잔의 여유를 즐겨보세요 😄
완료되면 최종 데이터는 다음과 같습니다.
이 Github 저장소에서 전체 소스 코드를 찾을 수 있습니다.
Python과 BeautifulSoup을 사용하여 Goodreads 데이터를 스크랩하는 방법을 배웠습니다. 기본 설정부터 CSV 파일에 데이터를 저장하는 것까지 스크래핑 프로세스의 모든 측면을 탐색했습니다. 스크랩된 데이터는 다음 용도로 사용될 수 있습니다.
웹 스크래핑은 창의적인 데이터 분석 및 응용 가능성을 열어줍니다. BeautifulSoup과 같은 라이브러리를 사용하면 복잡한 스크래핑 작업도 관리할 수 있습니다. 스크랩하는 동안 윤리적 관행을 따르고 웹사이트의 서비스 약관을 존중하는 것을 잊지 마세요!
위 내용은 Python과 BeautifulSoup을 사용하여 Goodreads에서 데이터를 긁어내는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!