#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. я был немного сбит с толку, когда вы изменили некоторые формулировки в коде, но мне удалось это выяснить! Большое спасибо!!