Я пишу веб-скребковый бот для сайта AutoTrader, популярного в Великобритании сайта по торговле автомобилями, и я пытаюсь сделать как можно больше самостоятельно, но я застрял в том, как его получить. мой сценарий, чтобы делать то, что я хочу.
По сути, я хочу, чтобы бот загружал определенную информацию на первых 100 страницах списков для каждой марки и марки автомобиля в пределах определенного радиуса к моему дому. Я также хочу, чтобы бот прекратил попытки загружать следующие страницы определенной марки / модели автомобиля, если больше нет новых списков.
Например, если есть только 4 страницы списков, и я прошу его скачать списки на странице 5, веб-URL автоматически изменится на страницу 1, и бот загрузит все списки на странице 1, затем он будет повторять этот процесс для следующих страниц вплоть до страницы 100. Очевидно, я не Мне не нужно 96 повторений автомобилей на странице 1 в моем наборе данных, поэтому я хотел бы перейти к следующей модели автомобиля, когда это произойдет, но я пока не нашел способа сделать это.
Вот что я получил до сих пор:
for x in range(1, 101):
makes = ["ABARTH", "AC", "AIXAM", "ARIEL", "ASTON%20MARTIN", "AUDI"]
for make in makes:
my_url_page_x_make_i = 'https://www.autotrader.co.uk/car-search?' + 'sort=distance' + '&postcode=BS247EY' + '&radius=300' + '&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New' + '&make=' + make + '&page=' + str(x)
uClient = uReq(my_url_page_x_make_i)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
listings = page_soup.findAll("li", {"class": "search-page__result"})
for listing in listings:
information_container = listing.find("div", {"class": "information-container"})
title_container = information_container.find("a", {
"class": "js-click-handler listing-fpa-link tracking-standard-link"})
title = title_container.text
price = listing.find("div", {"class": "vehicle-price"}).text
print("title: " + title)
print("price: " + price)
f.write(title.replace(",", "") + "," + price.replace(",", "") + "\n")
if len(listings) < 13: makes.remove(make)
f.close()
Это далеко от законченного сценария, и у меня есть только около 1 недели реального Python опыта кодирования.