J'essaie de récupérer toutes les images d'une page TripAdivsor spécifique, mais lorsque j'utilise la fonction find_elements_by_class_name dans Selenium, cela ne me donne aucune valeur. Je suis confus car c'est le nom de classe exact pour les valeurs que je veux parcourir et ajouter à une liste, voici le site. Toute aide serait grandement appréciée!

# importing dependencies
import re
import selenium
import io
import pandas as pd
import urllib.request
import urllib.parse
import requests
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time
from _datetime import datetime
from selenium.webdriver.common.keys import Keys


#setup opening url window of website to be scraped
options = webdriver.ChromeOptions()
options.headless=False
prefs = {"profile.default_content_setting_values.notifications" : 2} 
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome("/Users/rishi/Downloads/chromedriver 3") #possible issue by not including the file extension
driver.maximize_window()
time.sleep(5)
driver.get("""https://www.tripadvisor.com/""") #get the information from the page

#automate searching for hotels in specific city
driver.find_element_by_xpath('/html/body/div[2]/div/div[6]/div[1]/div/div/div/div/span[1]/div/div/div/a').click() #clicks on hotels option
driver.implicitly_wait(12) #allows xpath to be found
driver.find_element_by_xpath('//*[@id="BODY_BLOCK_JQUERY_REFLOW"]/div[12]/div/div/div[1]/div[1]/div/input').send_keys("Washington D.C.", Keys.ENTER) #change string to get certain city
time.sleep(8)

#now get current url
url = driver.current_url

response = requests.get(url)
response = response.text
data = BeautifulSoup(response, 'html.parser')

#get list of all hotels
hotels = driver.find_elements_by_class_name("prw_rup prw_meta_hsx_responsive_listing ui_section listItem")

print("Total Number of Hotels: ", len(hotels))

1
Rishiraj Kanungo 20 févr. 2020 à 05:42

1 réponse

Meilleure réponse

Je recommanderais que, si vous utilisez Selenium, n'utilisez pas BeautifulSoup à côté car vous pouvez obtenir tout ce que vous voulez en utilisant Selenium.

Vous pouvez simplement atteindre votre objectif comme suit :

driver = webdriver.Chrome("/Users/rishi/Downloads/chromedriver 3")
driver.maximize_window()

driver.get("https://www.tripadvisor.ca/Hotels")

time.sleep(1)

driver.implicitly_wait(12)
driver.find_element_by_xpath('//*[@class="typeahead_input"]').send_keys("Washington D.C.", Keys.ENTER)
time.sleep(1)
hotels = driver.find_elements_by_xpath('//*[@class="listing collapsed"]')

print("Total Number of Hotels: ", len(hotels))

Veuillez noter qu'en utilisant ce code, vous obtiendrez les 30 premiers hôtels (c'est-à-dire la première page). Vous devrez parcourir toutes les pages des hôtels de la ville spécifiée afin de les obtenir toutes.

J'espère que cela aide.

1
Taher Ahmed Ghaleb 20 févr. 2020 à 05:28