#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Я пытаюсь очистить веб-страницу с форматом 15 объявлений на страницу, а затем вы нажимаете на следующую страницу и получаете следующие 15 объявлений.
По какой-то причине скрипт очищает только с одной страницы и никогда не переходит на другую.
Вот мой код скрипта:
page_num = 10
curr_page = 1
i = 1
car_title, price_hrk, year_made, km_made, date_pub, temp = [], [], [], [], [], []
title = soup.find_all(class_="classified-title")
price_kn = soup.find_all(class_="price-kn")
info = soup.find_all(class_="info-wrapper")
date = soup.find_all("span", class_="date")
# while the current page is less then or equal to the page_num variable
while curr_page <= page_num:
# make a request with a current page
page = requests.get("https://www.oglasnik.hr/prodaja-automobila?page={}".format(curr_page))
# pass it to beautiful soup
soup = BeautifulSoup(page.content, "html.parser")
# while i is less then 15 elements on the single site
while i <= 15:
# check for existance
if title[i]:
# append the value
car_title.append(title[i].get_text())
else:
# append NaN
car_title.append(np.nan)
if price_kn[i]:
price_hrk.append(price_kn[i].get_text())
else:
price_hrk.append(np.nan)
if date[i]:
date_pub.append(date[i].get_text())
else:
date_pub.append(np.nan)
# dual values, so append both to a temporary list
for tag in info[i].find_all("span", class_="classified-param-value"):
for val in tag:
temp.append(val)
try:
# if length of element is less then 5
if len(temp[0]) < 5:
# it's a year, append to year_made list
year_made.append(temp[0])
km_made.append(temp[2])
except IndexError:
# if index out of bound append NaN
year_made.append(np.nan)
km_made.append(np.nan)
# reset temp
temp = []
# add 1 to i element
i = 1
# add 1 to current page
curr_page = 1
И теперь, если я распечатаю длину одного из списков, я получу 15.
Может кто-нибудь сказать мне, что я делаю не так, или указать мне правильное направление?
Спасибо.
Ответ №1:
Вам также необходимо сбросить свой i
. Прямо перед (или после)
curr_page = 1
Добавить:
i = 1
И это должно сработать.
Комментарии:
1. Хорошо, это возвращает 150 элементов в массив, но по какой-то причине повторяет одни и те же 15 элементов 10 раз…
2. Это странно; Я попробовал еще раз в своем ноутбуке Jupyter, и я получаю только 15 элементов на страницу.