[FIXED] Fehler in Selen beim Scrapen von Amazon-Daten

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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like