Селен как считать и отслеживать количество продуктов

#python #selenium #for-loop #web-scraping #xpath

Вопрос:

Я пытаюсь очистить данные продукта при задании ключевого слова/search_term, и до сих пор мне удавалось очистить все данные от первой до последней страницы.

Тем не менее, я хотел изменить его таким образом, чтобы я очистил только первые 100 или 150 продуктов, которые я не уверен, как это сделать.

Я считаю, что мне нужно какое-то целочисленное значение, которое отслеживает, сколько элементов я удаляю, и останавливается, когда целое число достигает 100 или 150.

Я знаю, что мне нужно что-то изменить на странице «для страницы в диапазоне (1, last_page)», но я попытался и в итоге получил 100 одинаковых результатов для каждого элемента, что не то, что я должен делать.

 def main(search_term):
    # RUN MAIN PROGRAM ROUTINE
    chromedriver = "path to chromedriver"
    driver = webdriver.Chrome(chromedriver)
    
    records = []
    url = get_url(search_term)
    
    driver.get(url)
    last_page = int(driver.find_element_by_xpath('(//div[@class="a-text-center"]/ul/li)[last()-1]').text)   1
    
    # NUMBER OF PAGES TO CRAWL
    for page in range(1, last_page):
        driver.get(url.format(page))
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        results = soup.find_all('div', {'data-component-type': 's-search-result'})
        print(page)
        
        for item in results:
            record = extract_record(item)
            if record:
                records.append(record)
                        
    driver.close()

# Run the main function given a keyword
main("make-up")
# leads to https://www.amazon.com/s?k=cosmeticsamp;ref=nb_sb_noss

#main("iphone")
 

Как бы я продолжал изменять его, чтобы я мог соскрести первые 100, 150 или любое другое число, которое я хочу соскрести?

Комментарии:

1. @Arundeep Чохан, я все равно закончу тем, что соскоблю до последней страницы, а это не то, чего я хочу

2. О, так вы хотели разорвать двойной цикл for.

Ответ №1:

Поэтому вам нужно проверить, равна ли длина записи 100, а затем прервать внешний цикл for.

 for page in range(1, last_page):
    driver.get(url.format(page))
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    results = soup.find_all('div', {'data-component-type': 's-search-result'})
    print(page)
    find=False
    for item in results:
        records.append(item)
        if len(records)==100:
            find=True
            break
    if find:
        break
            
 

Комментарии:

1. я был немного сбит с толку, когда вы изменили некоторые формулировки в коде, но мне удалось это выяснить! Большое спасибо!!