Skip to content

Instantly share code, notes, and snippets.

@me-suzy
Created September 14, 2024 07:18
Show Gist options
  • Save me-suzy/d4487e542df91e7636fe915eb821c4c2 to your computer and use it in GitHub Desktop.
Save me-suzy/d4487e542df91e7636fe915eb821c4c2 to your computer and use it in GitHub Desktop.
download google books 2
import os
import time
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException
# Utilizarea Selenium Manager pentru a gestiona driverul corect
service = Service()
# Opțiuni pentru Chrome
chrome_options = Options()
chrome_options.add_argument('--start-maximized')
# Inițializează driver-ul Chrome
driver = webdriver.Chrome(service=service, options=chrome_options)
# URL-ul cărții de pe Google Books
url = 'https://www.google.ro/books/edition/Valori_clasice/1wsYAAAAMAAJ?hl=ro&gbpv=1'
# Deschide pagina cărții în browser
driver.get(url)
# Directorul unde vor fi salvate imaginile
save_directory = 'D:\\Books\\Valori_clasice'
if not os.path.exists(save_directory):
os.makedirs(save_directory)
# Așteaptă ca pagina să se încarce complet
time.sleep(5)
# Funcție pentru a încerca găsirea butonului de pagina următoare
def find_next_button():
try:
# Încercare cu aria-label 'Pagina următoare'
next_button = driver.find_element('xpath', "//div[@aria-label='Pagina următoare']")
print("Butonul de pagina următoare a fost găsit cu aria-label='Pagina următoare'!")
return next_button
except NoSuchElementException:
try:
# Încercare cu clasa 'pagination'
next_button = driver.find_element('xpath', "//div[contains(@class, 'pagination')]")
print("Butonul de pagina următoare a fost găsit cu clasa pagination!")
return next_button
except NoSuchElementException:
try:
# Încercare cu altă clasă comună
next_button = driver.find_element('xpath', "//button[contains(text(), 'Next')]")
print("Butonul de pagina următoare a fost găsit cu text 'Next'!")
return next_button
except NoSuchElementException:
return None
# Descarcă toate imaginile din pagină
while True:
# Preluăm HTML-ul paginii și îl parsăm
soup = BeautifulSoup(driver.page_source, 'html.parser')
# Găsește toate imaginile vizibile din carte
images = soup.find_all('img')
# Descărcăm imaginile găsite
for index, img in enumerate(images):
img_url = img['src']
if img_url.startswith('http'):
img_data = requests.get(img_url).content
img_path = os.path.join(save_directory, f'page_{index}.jpg')
if not os.path.exists(img_path):
with open(img_path, 'wb') as img_file:
img_file.write(img_data)
print(f'Descărcată pagina {index}')
# Caută butonul de „pagina următoare” și apasă pe el dacă există
next_button = find_next_button()
if next_button:
next_button.click()
time.sleep(5) # Așteaptă ca pagina următoare să se încarce
else:
print("Nu s-a găsit butonul pentru pagina următoare sau a fost atinsă ultima pagină.")
break
# Închide browserul
driver.quit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment