Cách cào dữ liệu Good Books | Good Books Web Scraper

Tìm hiểu cách cào dữ liệu Good Books (goodbooks.io) để trích xuất hơn 9.500 đề xuất sách từ chuyên gia. Lấy tiêu đề, tác giả và danh sách người có tầm ảnh...

Pham vi:Global
Du lieu co san7 truong
Tieu deMo taHinh anhThong tin nguoi banNgay dangDanh mucThuoc tinh
Tat ca truong co the trich xuat
Tiêu đề sáchTên tác giảDanh mục sáchSố lượng đề xuấtTên người đề xuấtNgành của người đề xuấtURL hình ảnh bìa sáchLiên kết mua hàng AmazonLiên kết Apple BooksTiêu đề bài viết blogDanh mục ngànhXếp hạng Top 100
Yeu cau ky thuat
HTML tinh
Khong can dang nhap
Co phan trang
Khong co API chinh thuc
Phat hien bao ve chong bot
Rate LimitingNone detected

Phat hien bao ve chong bot

Giới hạn tốc độ
Giới hạn yêu cầu theo IP/phiên theo thời gian. Có thể vượt qua bằng proxy xoay vòng, trì hoãn yêu cầu và thu thập phân tán.
None detected

Về Good Books

Khám phá những gì Good Books cung cấp và dữ liệu giá trị nào có thể được trích xuất.

Nguồn uy tín về các đề xuất từ chuyên gia

Good Books là một nền tảng kỹ thuật số được tuyển chọn, tổng hợp các đề xuất sách từ những cá nhân thành công và có ảnh hưởng nhất thế giới. Được thành lập với sứ mệnh giúp mọi người khám phá những tác phẩm văn học chất lượng, trang web này cung cấp danh sách đọc từ các doanh nhân như Elon Musk, các nhà hoạt động như Oprah Winfrey và các tác giả như James Clear. Nền tảng này đóng vai trò như một kho lưu trữ khổng lồ về tri thức đã được các chuyên gia phê duyệt, bao gồm hàng nghìn tiêu đề thuộc nhiều thể loại khác nhau.

Dữ liệu tri thức có cấu trúc

Trang web tổ chức dữ liệu thành bốn trụ cột chính: sách, con người, ngành nghề và danh sách tuyển chọn. Người dùng có thể khám phá các danh mục cụ thể như kinh doanh, khoa học hoặc tiểu thuyết, hoặc tìm hiểu thói quen đọc sách của các cá nhân trong các lĩnh vực cụ thể như đầu tư mạo hiểm hoặc truyền thông. Mỗi mục sách thường bao gồm tiêu đề, tác giả và danh sách những cá nhân cụ thể đã xác nhận nó, thường đi kèm với các liên kết đến các nhà bán lẻ lớn như Amazon và Apple Books.

Tại sao nên cào dữ liệu Good Books?

Cào dữ liệu Good Books cực kỳ giá trị để xây dựng các công cụ gợi ý, thực hiện nghiên cứu đối thủ cạnh tranh về các xu hướng trí tuệ hoặc tạo nội dung ngách cho những người yêu sách. Vì dữ liệu được gắn liền với các nhân vật nổi tiếng, nó cung cấp một lớp bằng chứng xã hội và uy tín độc đáo mà siêu dữ liệu của các nhà sách tiêu chuẩn thường thiếu. Việc tổng hợp thông tin này cho phép phân tích sâu về những gì các nhà tư tưởng trên thế giới đang đọc và đề xuất.

Về Good Books

Tại Sao Nên Scrape Good Books?

Khám phá giá trị kinh doanh và các trường hợp sử dụng để trích xuất dữ liệu từ Good Books.

Xây dựng cơ sở dữ liệu đề xuất sách có độ uy tín cao cho affiliate marketing

Xác định các chủ đề và thể loại đang thịnh hành trong giới lãnh đạo tư tưởng toàn cầu

Theo dõi thói quen đọc sách của các biểu tượng ngành cụ thể như Warren Buffett hoặc Naval Ravikant

Tổng hợp danh sách 'Top 100' để sáng tạo nội dung và tuyển chọn cho mạng xã hội

Thực hiện phân tích thị trường về các tài liệu kinh doanh và phát triển bản thân có ảnh hưởng nhất

Tạo danh sách khách hàng tiềm năng gồm những người có tầm ảnh hưởng và tác giả trong các lĩnh vực tri thức cụ thể

Thách Thức Khi Scrape

Những thách thức kỹ thuật bạn có thể gặp khi scrape Good Books.

Xử lý cấu trúc điều hướng 'View All' để tiếp cận toàn bộ hơn 9.500 đề xuất

Liên kết những người đề xuất cá nhân với các cuốn sách tương ứng của họ thông qua các URL khác nhau

Duy trì độ chính xác của dữ liệu khi một cuốn sách có nhiều tác giả hoặc các phiên bản khác nhau

Trích xuất siêu dữ liệu sạch từ các quy ước đặt tên lớp CSS đặc thù của Webflow

Thu thập dữ liệu Good Books bằng AI

Không cần code. Trích xuất dữ liệu trong vài phút với tự động hóa AI.

Cách hoạt động

1

Mô tả những gì bạn cần

Cho AI biết bạn muốn trích xuất dữ liệu gì từ Good Books. Chỉ cần viết bằng ngôn ngữ tự nhiên — không cần code hay selector.

2

AI trích xuất dữ liệu

AI của chúng tôi điều hướng Good Books, xử lý nội dung động và trích xuất chính xác những gì bạn yêu cầu.

3

Nhận dữ liệu của bạn

Nhận dữ liệu sạch, có cấu trúc, sẵn sàng xuất sang CSV, JSON hoặc gửi trực tiếp đến ứng dụng của bạn.

Tại sao nên dùng AI để thu thập dữ liệu

Giao diện no-code cho phép bất kỳ ai cũng có thể xây dựng công cụ cào dữ liệu mà không cần kiến thức kỹ thuật
Tự động xử lý phân trang và các luồng điều hướng phức tạp
Khả năng lập lịch cào dữ liệu để nắm bắt các đề xuất mới ngay khi chúng được thêm vào
Thực thi trên đám mây (cloud) cho phép trích xuất dữ liệu tốc độ cao mà không tốn tài nguyên máy cục bộ
Tùy chọn xuất trực tiếp sang CSV, Google Sheets hoặc các API khác nhau
Không cần thẻ tín dụngGói miễn phí có sẵnKhông cần cài đặt

AI giúp việc thu thập dữ liệu từ Good Books dễ dàng mà không cần viết code. Nền tảng AI của chúng tôi hiểu dữ liệu bạn cần — chỉ cần mô tả bằng ngôn ngữ tự nhiên, AI sẽ tự động trích xuất.

How to scrape with AI:
  1. Mô tả những gì bạn cần: Cho AI biết bạn muốn trích xuất dữ liệu gì từ Good Books. Chỉ cần viết bằng ngôn ngữ tự nhiên — không cần code hay selector.
  2. AI trích xuất dữ liệu: AI của chúng tôi điều hướng Good Books, xử lý nội dung động và trích xuất chính xác những gì bạn yêu cầu.
  3. Nhận dữ liệu của bạn: Nhận dữ liệu sạch, có cấu trúc, sẵn sàng xuất sang CSV, JSON hoặc gửi trực tiếp đến ứng dụng của bạn.
Why use AI for scraping:
  • Giao diện no-code cho phép bất kỳ ai cũng có thể xây dựng công cụ cào dữ liệu mà không cần kiến thức kỹ thuật
  • Tự động xử lý phân trang và các luồng điều hướng phức tạp
  • Khả năng lập lịch cào dữ liệu để nắm bắt các đề xuất mới ngay khi chúng được thêm vào
  • Thực thi trên đám mây (cloud) cho phép trích xuất dữ liệu tốc độ cao mà không tốn tài nguyên máy cục bộ
  • Tùy chọn xuất trực tiếp sang CSV, Google Sheets hoặc các API khác nhau

Công cụ scrape web no-code cho Good Books

Các giải pháp thay thế point-and-click cho scraping bằng AI

Một số công cụ no-code như Browse.ai, Octoparse, Axiom và ParseHub có thể giúp bạn scrape Good Books mà không cần viết code. Các công cụ này thường sử dụng giao diện trực quan để chọn dữ liệu, mặc dù có thể gặp khó khăn với nội dung động phức tạp hoặc các biện pháp anti-bot.

Quy trình làm việc điển hình với công cụ no-code

1
Cài đặt tiện ích trình duyệt hoặc đăng ký trên nền tảng
2
Điều hướng đến trang web mục tiêu và mở công cụ
3
Chọn các phần tử dữ liệu cần trích xuất bằng cách nhấp chuột
4
Cấu hình bộ chọn CSS cho mỗi trường dữ liệu
5
Thiết lập quy tắc phân trang để scrape nhiều trang
6
Xử lý CAPTCHA (thường yêu cầu giải quyết thủ công)
7
Cấu hình lịch trình cho các lần chạy tự động
8
Xuất dữ liệu sang CSV, JSON hoặc kết nối qua API

Thách thức phổ biến

Đường cong học tập

Hiểu bộ chọn và logic trích xuất cần thời gian

Bộ chọn bị hỏng

Thay đổi trang web có thể phá vỡ toàn bộ quy trình làm việc

Vấn đề nội dung động

Các trang web sử dụng nhiều JavaScript cần giải pháp phức tạp

Hạn chế CAPTCHA

Hầu hết công cụ yêu cầu can thiệp thủ công cho CAPTCHA

Chặn IP

Scraping quá mức có thể dẫn đến IP bị chặn

Công cụ scrape web no-code cho Good Books

Một số công cụ no-code như Browse.ai, Octoparse, Axiom và ParseHub có thể giúp bạn scrape Good Books mà không cần viết code. Các công cụ này thường sử dụng giao diện trực quan để chọn dữ liệu, mặc dù có thể gặp khó khăn với nội dung động phức tạp hoặc các biện pháp anti-bot.

Quy trình làm việc điển hình với công cụ no-code
  1. Cài đặt tiện ích trình duyệt hoặc đăng ký trên nền tảng
  2. Điều hướng đến trang web mục tiêu và mở công cụ
  3. Chọn các phần tử dữ liệu cần trích xuất bằng cách nhấp chuột
  4. Cấu hình bộ chọn CSS cho mỗi trường dữ liệu
  5. Thiết lập quy tắc phân trang để scrape nhiều trang
  6. Xử lý CAPTCHA (thường yêu cầu giải quyết thủ công)
  7. Cấu hình lịch trình cho các lần chạy tự động
  8. Xuất dữ liệu sang CSV, JSON hoặc kết nối qua API
Thách thức phổ biến
  • Đường cong học tập: Hiểu bộ chọn và logic trích xuất cần thời gian
  • Bộ chọn bị hỏng: Thay đổi trang web có thể phá vỡ toàn bộ quy trình làm việc
  • Vấn đề nội dung động: Các trang web sử dụng nhiều JavaScript cần giải pháp phức tạp
  • Hạn chế CAPTCHA: Hầu hết công cụ yêu cầu can thiệp thủ công cho CAPTCHA
  • Chặn IP: Scraping quá mức có thể dẫn đến IP bị chặn

Vi du ma

import requests
from bs4 import BeautifulSoup

# Set headers to mimic a browser
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

def scrape_goodbooks_home():
    url = 'https://goodbooks.io/'
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # Find featured books
        books = soup.find_all('div', class_='book-card-featured')
        
        for book in books:
            title = book.find('h5').get_text(strip=True) if book.find('h5') else 'N/A'
            author = book.find('h6').get_text(strip=True) if book.find('h6') else 'N/A'
            print(f'Book: {title} | Author: {author}')
            
    except requests.exceptions.RequestException as e:
        print(f'Error occurred: {e}')

if __name__ == '__main__':
    scrape_goodbooks_home()

Khi nào sử dụng

Phù hợp nhất cho các trang HTML tĩnh với ít JavaScript. Lý tưởng cho blog, trang tin tức và các trang sản phẩm e-commerce đơn giản.

Ưu điểm

  • Thực thi nhanh nhất (không có overhead trình duyệt)
  • Tiêu thụ tài nguyên thấp nhất
  • Dễ dàng song song hóa với asyncio
  • Tuyệt vời cho API và trang tĩnh

Hạn chế

  • Không thể chạy JavaScript
  • Thất bại trên SPA và nội dung động
  • Có thể gặp khó khăn với các hệ thống anti-bot phức tạp

Cach thu thap du lieu Good Books bang ma

Python + Requests
import requests
from bs4 import BeautifulSoup

# Set headers to mimic a browser
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

def scrape_goodbooks_home():
    url = 'https://goodbooks.io/'
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # Find featured books
        books = soup.find_all('div', class_='book-card-featured')
        
        for book in books:
            title = book.find('h5').get_text(strip=True) if book.find('h5') else 'N/A'
            author = book.find('h6').get_text(strip=True) if book.find('h6') else 'N/A'
            print(f'Book: {title} | Author: {author}')
            
    except requests.exceptions.RequestException as e:
        print(f'Error occurred: {e}')

if __name__ == '__main__':
    scrape_goodbooks_home()
Python + Playwright
from playwright.sync_api import sync_playwright

def run(playwright):
    # Launch browser
    browser = playwright.chromium.launch(headless=True)
    page = browser.new_page()
    
    # Navigate to Good Books listings
    page.goto('https://goodbooks.io/books')
    
    # Wait for the book items to load
    page.wait_for_selector('.book-item')
    
    # Extract book data from the page
    books = page.query_selector_all('.book-item')
    for book in books:
        title = book.query_selector('h5').inner_text()
        author = book.query_selector('h6').inner_text()
        print(f'Scraped: {title} by {author}')
    
    # Close connection
    browser.close()

with sync_playwright() as playwright:
    run(playwright)
Python + Scrapy
import scrapy

class GoodbooksSpider(scrapy.Spider):
    name = 'goodbooks'
    allowed_domains = ['goodbooks.io']
    start_urls = ['https://goodbooks.io/books']

    def parse(self, response):
        # Extract details for each book item
        for book in response.css('.book-item-class'):
            yield {
                'title': book.css('h5::text').get(),
                'author': book.css('h6::text').get(),
                'url': response.urljoin(book.css('a::attr(href)').get()),
            }

        # Handle simple pagination link
        next_page = response.css('a.next-page-selector::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)
Node.js + Puppeteer
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  
  await page.goto('https://goodbooks.io/top-100/all-books');
  
  // Ensure cards are rendered
  await page.waitForSelector('.book-card');

  const data = await page.evaluate(() => {
    const items = Array.from(document.querySelectorAll('.book-card'));
    return items.map(item => ({
      title: item.querySelector('h5') ? item.querySelector('h5').innerText : 'N/A',
      author: item.querySelector('h6') ? item.querySelector('h6').innerText : 'N/A'
    }));
  });

  console.log(data);
  await browser.close();
})();

Bạn Có Thể Làm Gì Với Dữ Liệu Good Books

Khám phá các ứng dụng thực tế và thông tin chi tiết từ dữ liệu Good Books.

Dịch vụ đăng ký sách tuyển chọn

Các startup có thể sử dụng dữ liệu để tạo ra một câu lạc bộ sách của tháng dựa trên thói quen đọc sách của những người thành công.

Cách triển khai:

  1. 1Cào các cuốn sách được đề xuất nhiều nhất trong mục 'Kinh doanh' và 'Phát triển bản thân'.
  2. 2Đối soát chéo các cuốn sách xuất hiện trong nhiều danh sách đọc của những người nổi tiếng.
  3. 3Thiết lập dịch vụ đăng ký hàng tháng cung cấp cuốn sách được đề xuất nhiều nhất trong giai đoạn đó.
  4. 4Bao gồm các bản tóm tắt kỹ thuật số nêu bật lý do tại sao các tỷ phú lại đề xuất nó.

Sử dụng Automatio để trích xuất dữ liệu từ Good Books và xây dựng các ứng dụng này mà không cần viết code.

Bạn Có Thể Làm Gì Với Dữ Liệu Good Books

  • Dịch vụ đăng ký sách tuyển chọn

    Các startup có thể sử dụng dữ liệu để tạo ra một câu lạc bộ sách của tháng dựa trên thói quen đọc sách của những người thành công.

    1. Cào các cuốn sách được đề xuất nhiều nhất trong mục 'Kinh doanh' và 'Phát triển bản thân'.
    2. Đối soát chéo các cuốn sách xuất hiện trong nhiều danh sách đọc của những người nổi tiếng.
    3. Thiết lập dịch vụ đăng ký hàng tháng cung cấp cuốn sách được đề xuất nhiều nhất trong giai đoạn đó.
    4. Bao gồm các bản tóm tắt kỹ thuật số nêu bật lý do tại sao các tỷ phú lại đề xuất nó.
  • Công cụ gợi ý AI

    Các nhà phát triển có thể đưa dữ liệu vào một machine learning model để dự đoán những gì người dùng có thể thích dựa trên những nhà lãnh đạo mà họ ngưỡng mộ.

    1. Trích xuất danh sách các cuốn sách được đề xuất bởi các cá nhân trong các ngành khác nhau.
    2. Huấn luyện một model để xác định các mẫu giữa những người đề xuất cụ thể và thể loại sách.
    3. Tạo một giao diện nơi người dùng chọn những người có tầm ảnh hưởng để nhận được danh sách đọc tổng hợp.
    4. Tích hợp các liên kết affiliate để kiếm tiền.
  • Chiến lược nội dung cho các nhà tư tưởng

    Các nhà văn và người có tầm ảnh hưởng có thể sử dụng dữ liệu để viết các bài nghiên cứu sâu về những cuốn sách có ảnh hưởng nhất trong một thập kỷ.

    1. Xác định các cuốn sách được đề xuất nhiều nhất trên tất cả các danh mục trên Good Books.
    2. Trích xuất các câu trích dẫn hoặc ngữ cảnh cho các đề xuất nếu có.
    3. Viết các bài luận so sánh về cách những cuốn sách này định hình các ngành cụ thể.
    4. Sử dụng 'số lượng đề xuất' như một chỉ số định lượng cho tác động của cuốn sách.
  • Trang web Affiliate ngách

    Tạo một trang web đánh giá có lưu lượng truy cập cao, tổng hợp các đề xuất từ những người nổi tiếng với các liên kết Amazon affiliate.

    1. Cào tiêu đề sách, tác giả và những người có tầm ảnh hưởng cụ thể đã đề xuất chúng.
    2. Xây dựng các trang tối ưu hóa SEO cho các truy vấn như 'Danh sách sách nên đọc của Elon Musk' hoặc 'Sách yêu thích của Oprah'.
    3. Tự động chèn các liên kết affiliate cho mỗi tiêu đề sách.
    4. Thường xuyên cập nhật dữ liệu để bao gồm các đề xuất mới từ những người có tầm ảnh hưởng.
  • Phân tích xu hướng thị trường

    Các nhà xuất bản có thể phân tích thể loại hoặc chủ đề cụ thể nào đang thu hút sự chú ý của các nhà lãnh đạo trong ngành.

    1. Cào phần 'Industries' để xem cuốn sách nào đang thịnh hành trong lĩnh vực Đầu tư mạo hiểm so với Truyền thông.
    2. Theo dõi việc bổ sung sách mới theo thời gian để thấy sự thay đổi trong mối quan tâm trí tuệ.
    3. Xác định các khoảng trống trong thị trường nơi những người có tầm ảnh hưởng đề xuất các tác phẩm kinh điển cũ nhưng có ít sách mới tồn tại.
    4. Sử dụng dữ liệu để chào mời các ý tưởng sách mới cho tác giả dựa trên xu hướng đọc hiện tại của những người có tầm ảnh hưởng.
Hon ca prompt

Tang cuong quy trinh lam viec cua ban voi Tu dong hoa AI

Automatio ket hop suc manh cua cac AI agent, tu dong hoa web va tich hop thong minh de giup ban lam duoc nhieu hon trong thoi gian ngan hon.

AI Agent
Tu dong hoa web
Quy trinh thong minh

Mẹo Pro Cho Việc Scrape Good Books

Lời khuyên chuyên gia để trích xuất dữ liệu thành công từ Good Books.

Tập trung vào các mục 'Top 100' và 'People' trước để thu thập những dữ liệu có giá trị cao nhất một cách nhanh chóng.

Các trang web Webflow thường sử dụng các thuộc tính dữ liệu cụ thể; hãy kiểm tra phần tử (inspect elements) để xem có các siêu dữ liệu ẩn như ID hay không.

Thiết lập độ trễ từ 1-3 giây giữa các yêu cầu để tránh kích hoạt các rate limits cơ bản trên máy chủ lưu trữ.

Sử dụng residential proxy nếu bạn có kế hoạch cào toàn bộ hơn 9.500 mục trong một phiên duy nhất.

Làm sạch các chuỗi tên tác giả để loại bỏ chữ 'by' hoặc các liên từ nối nhiều tác giả để chuẩn hóa cơ sở dữ liệu tốt hơn.

Theo dõi phần blog để biết các danh sách đọc mới có thể chưa được cập nhật vào danh mục chính.

Danh gia

Nguoi dung cua chung toi noi gi

Tham gia cung hang nghin nguoi dung hai long da thay doi quy trinh lam viec cua ho

Jonathan Kogan

Jonathan Kogan

Co-Founder/CEO, rpatools.io

Automatio is one of the most used for RPA Tools both internally and externally. It saves us countless hours of work and we realized this could do the same for other startups and so we choose Automatio for most of our automation needs.

Mohammed Ibrahim

Mohammed Ibrahim

CEO, qannas.pro

I have used many tools over the past 5 years, Automatio is the Jack of All trades.. !! it could be your scraping bot in the morning and then it becomes your VA by the noon and in the evening it does your automations.. its amazing!

Ben Bressington

Ben Bressington

CTO, AiChatSolutions

Automatio is fantastic and simple to use to extract data from any website. This allowed me to replace a developer and do tasks myself as they only take a few minutes to setup and forget about it. Automatio is a game changer!

Sarah Chen

Sarah Chen

Head of Growth, ScaleUp Labs

We've tried dozens of automation tools, but Automatio stands out for its flexibility and ease of use. Our team productivity increased by 40% within the first month of adoption.

David Park

David Park

Founder, DataDriven.io

The AI-powered features in Automatio are incredible. It understands context and adapts to changes in websites automatically. No more broken scrapers!

Emily Rodriguez

Emily Rodriguez

Marketing Director, GrowthMetrics

Automatio transformed our lead generation process. What used to take our team days now happens automatically in minutes. The ROI is incredible.

Jonathan Kogan

Jonathan Kogan

Co-Founder/CEO, rpatools.io

Automatio is one of the most used for RPA Tools both internally and externally. It saves us countless hours of work and we realized this could do the same for other startups and so we choose Automatio for most of our automation needs.

Mohammed Ibrahim

Mohammed Ibrahim

CEO, qannas.pro

I have used many tools over the past 5 years, Automatio is the Jack of All trades.. !! it could be your scraping bot in the morning and then it becomes your VA by the noon and in the evening it does your automations.. its amazing!

Ben Bressington

Ben Bressington

CTO, AiChatSolutions

Automatio is fantastic and simple to use to extract data from any website. This allowed me to replace a developer and do tasks myself as they only take a few minutes to setup and forget about it. Automatio is a game changer!

Sarah Chen

Sarah Chen

Head of Growth, ScaleUp Labs

We've tried dozens of automation tools, but Automatio stands out for its flexibility and ease of use. Our team productivity increased by 40% within the first month of adoption.

David Park

David Park

Founder, DataDriven.io

The AI-powered features in Automatio are incredible. It understands context and adapts to changes in websites automatically. No more broken scrapers!

Emily Rodriguez

Emily Rodriguez

Marketing Director, GrowthMetrics

Automatio transformed our lead generation process. What used to take our team days now happens automatically in minutes. The ROI is incredible.

Lien quan Web Scraping

Cau hoi thuong gap ve Good Books

Tim cau tra loi cho cac cau hoi thuong gap ve Good Books