El selenio y hermoso sopa Volviendo len diferente () Los valores en el mismo sitio web Raspe (Amazonas)

jamesishere:

En el ejemplo de código siguiente, consigo resultados diferentes para el print(len(block1))elemento al final del código. Me parece que no puede averiguar qué está causando esto:

  • mi código,
  • carga de la página con el selenio,
  • algún tipo de método anti-raspa que utiliza Amazon, o
  • una cosa tonta que me falta.

Mis diez resultados más recientes se

LOG: 3/14/2020 - 2:30pm EDT 
Length Results for 10 separate runs:
0 / 20 / 55 / 25 / 57 / 55 / 6 / 59 / 54 / 39
# python version: 3.8.1
#Import necessary modules
from selenium import webdriver # version 3.141.0
from bs4 import BeautifulSoup # version 4.8.2

#set computer path and object to chrome browser
chrome_path = r"C:\webdrivers\chromedriver.exe"
browser = webdriver.Chrome(chrome_path)

# search Amazon for "bar+soap"
# use 'get' for URL request and set object to variable "source"
browser.get("https://www.amazon.com/s?k=soap+bar&ref=nb_sb_noss_2")
source = browser.page_source

#use Beautiful Soup to parse html
page_soup = BeautifulSoup(source, 'html.parser')

#set a variable "block1" to find all "a" tags that fit criteria
block1 = page_soup.findAll("a", {"class":"a-size-base"})

#print the number of tags pulled
print(len(block1))
Svetlana Levinsohn:

Su código es correcto. He modificado un poco para asegurarse de que todo está bien, así que he recogido las etiquetas con tanto Selenio y hermoso sopa y contados, que siempre coinciden.

Yo estaba muy diferentes resultados en un primer momento, por lo que añade 7 seg espera después de carga de la página. Esto hizo que las cosas más estable, por lo que es posible que algunos de los elementos simplemente tardan más en cargarse y, si se incluye no están en la página.

Esto no resuelve totalmente el problema. Todavía estoy consiguiendo resultados diferentes, por 10 carreras, tengo 64 (2), 65 (6), 67 (2). Mi recomendación para usted sería a:

  1. trate de añadir y aumentar sleepy ver cómo se comporta;
  2. tratar realmente imprimir los resultados y ver cuál es la diferencia entre las corridas;
  3. potencialmente, sólo tiene que utilizar el resultado que se obtiene con mayor frecuencia debido a que una gran cantidad de sitios web corre el producto pruebas A / B y no puede haber interfaz de usuario múltiples / variantes de contenido para la misma página o diferentes componentes de la misma página (esto es muy probable que nuestro caso) . Así que cada vez que corremos el guión, de entrar en un determinado Una variante / B o probablemente una combinación de variantes, lo que lleva a estos resultados.

Por si acaso, mi código:

#Import necessary modules
from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep

#set computer path and object to chrome browser
browser = webdriver.Chrome()

# use 'get' for URL request and set object to variable "source"
browser.get("https://www.amazon.com/s?k=soap+bar&ref=nb_sb_noss_2")
sleep(7)
source = browser.page_source

#use Beautiful Soup to parse html
page_soup = BeautifulSoup(source, 'html.parser')

#set a variable "block1" to find all "a" tags that fit criteria
block1 = page_soup.findAll("a", {"class":"a-size-base"})
#print the number of tags pulled
print('BS', len(block1))

# To be save, let's also count with pure Selenium:
e = browser.find_elements_by_css_selector('a.a-size-base')
print('SEL', len(e))

Espero que esto ayude, buena suerte.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=284095&siteId=1
Recomendado
Clasificación