Actualmente estoy tratando de crear un script de python que pueda ingresar al sitio web de Menards y obtener todas las descripciones de sus productos, SKU y precio y luego importarlos a un archivo de Excel. Entonces puedo crear tablas dinámicas o hacer otras cosas con sus productos. Actualmente, pude hacerlo funcionar usando XPath, etc. Pero este método no es muy sólido ya que se basa en la ruta específica para cada página web diferente. Lo que quiero hacer es hacer algo más robusto que pueda usarse en el sitio web que estoy viendo. Estos son los sitios web a los que me refiero.
https://www.menards.com/main/electrical/conduit-conduit-fittings-raceways/conduit/c-6423.htm?queryType=allItems&rid=ipKkIrbnch&shippingOptions_facet=Pickup+at+Store+Eligible' https://www.menards.com/main/electrical/conduit-conduit-fittings-raceways/conduit-fittings-supports/c-9538.htm queryType=allItems&shippingOptions_facet=Pickup+at+Store+Eligible&sortby=priceAsc' https://www.menards.com/main/electrical/light-switches-dimmers-outlets/light-switches/c-6324.htm?queryType=allItems&Spec_Color%2FFinishFamily_facet=Ivory&Spec_Color%2FFinishFamily_facet=Light+Almond&Spec_Color%2FFinishFamily_facet=White&shippingOptions_facet=Pickup+at+Store+Eligible&sortby=priceAsc/'Este es el código que tengo actualmente para tratar de encontrar un diseño más robusto.
driver.get(website.get('IRW')) driver.minimize_window() description = driver.find_elements(By.CSS_SELECTOR, ".search-item") print(len(description)) for ll in range(0, 1): print(description[ll].text)Actualmente, este código solo ubica todos los elementos en la página web por su nombre de clase "elementos de búsqueda". Que ubica la mayoría de los elementos y demás, pero sin embargo obtengo mucha basura con los resultados que quiero. Aquí hay un ejemplo de lo que soy salida del código:
> 11 Click here to go to detail page Bestseller 12 Variations Available > 12 Gauge NM-B Cable with Ground Wire Click to add item "12 Gauge NM-B > Cable with Ground Wire" to the compare list Compare Click to add item > "12 Gauge NM-B Cable with Ground Wire" to the compare list Add To List > Click to add item 12 Gauge NM-B Cable with Ground Wire to your list > Sku # 3691660 $25.79 You Save $3.19 with Mail-In Rebate More > Information Shipping CHOOSE VARIATION NoneQuiero evitar tener que reemplazar la cadena actual y hacer muchos bucles para obtener los valores, ya que toda esta basura no es consistente en todas las páginas web. Espero que sea una mejor manera de ubicar los elementos. Cualquier idea gracias!
Puedes usar el css hijo > y descendiente combinadores para especificar hijos o descendientes directos (respectivamente) de padres con search-item clase, en una secuencia que aísla solo los href de interés
links = [i.text for i in driver.find_elements_by_css_selector("#search-items > .search-item .details > a")]Gracias QHarr. Pude descubrir cómo acceder a otras clases con esta clase específica. La línea de código que me permite hacer esto es la siguiente:
#for description description = [i.text for i in driver.find_elements(By.CSS_SELECTOR, "#search-items > .search-item .details > a > .row.pt-5.pb-sm-5 > .multilines-3.text-truncate-multilines.xs-single-col-8.col-12 > .font-weight-bold.text-dark")] print(description)