Ausgabe
Ich habe ein Programm erstellt, um Daten von Amazon zu verschrotten, bekomme aber Fehler, die ich nicht verstehen kann. Ich verwende Xpath, um Klassen zu finden, und ich habe versucht, Büchernamen auf einer Amazon-Seite zu extrahieren. Ich suche Amazon mit einem Schlüsselwort, das Bücher hackt, und es durchsucht es erfolgreich, aber es gibt nach der Suche kein Ergebnis. Ich habe folgenden Code ausprobiert
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time as t
import pandas as pd
driver = webdriver.Chrome(executable_path='chromedriver.exe')
wait = WebDriverWait(driver, 5)
url = "https://www.amazon.com"
driver.get(url)
keyword = "hacking books"
search_book = driver.find_element(By.ID,'twotabsearchtextbox')
search_book.send_keys(keyword)
search_button = driver.find_element(By.ID,'nav-search-submit-button')
search_button.click()
big_list = []
while True:
try:
items = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//a[@class =alink-normal s-underline-text s-underline-link-text s-link-style a-text-normal]')))
for i in items:
big_list.append((i.text, i.get_attribute('href')))
next_page_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//span[@class=s-pagination-strip]//a[contains(text(), "Next")]')))
next_page_button.location_once_scrolled_into_view
t.sleep(10)
next_page_button.click()
print('clicked, going to next page')
t.sleep(10)
except TimeoutException:
print('all pages done')
break
df = pd.DataFrame(big_list, columns = ['Book', 'Url'])
print(df)
df.to_csv('hacking_books.csv')
driver.quit()
Können Sie helfen, Fehler zu finden.
Lösung
Das Problem ist einfach, dass Sie keine doppelten Anführungszeichen in Klassennamen verwenden
//a[@class ="alink-normal s-underline-text s-underline-link-text s-link-style a-text-normal"]'
Und dasselbe gilt für andere XPath-Verwendungen in doppelten Anführungszeichen wie class=””
Beantwortet von – lokp
Antwort geprüft von – Dawn Plyler (FixError Volunteer)