Ваш код выглядит правильно. Я немного изменил его, чтобы убедиться, что все в порядке, поэтому я собрал теги с Selenium и Beautiful Soup и посчитал, что они всегда совпадают.
Сначала я получал совсем другие результаты, поэтому я добавил 7 se c wait после загрузки страницы. Это сделало вещи более стабильными, поэтому возможно, что некоторые элементы просто загружаются дольше, а когда вы считаете, не на странице.
Это не полностью решило проблему. Я все еще получаю разные результаты, за 10 пробежек я получил 64 (2), 65 (6), 67 (2). Я рекомендую вам:
- попробовать добавить и увеличить
sleep
и посмотреть, как он себя ведет; - попробовать распечатать результаты и посмотреть, в чем разница между прогонами ;
- потенциально, просто используйте результат, который вы получаете чаще всего, потому что многие веб-сайты запускают продукт A / B-тесты и может быть несколько вариантов пользовательского интерфейса / контента для одной и той же страницы или разных компоненты одной и той же страницы (это, скорее всего, наш случай). Поэтому каждый раз, когда мы запускаем скрипт, мы попадаем в определенный вариант A / B или, возможно, комбинацию вариантов, что приводит к этим результатам.
На всякий случай, мой код:
#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))
Надеюсь, это поможет, удачи.