Парсинг AUTO.RIA. Почемуто цикл выполняется только для одного элемента
Пишу парсер для AUTO.RIA и мне нужно написать цикл, для добавления элементов в список cars. Почему-то цикл добавляет только первый элемент в список:
from bs4 import BeautifulSoup as BS4
import requests
host = 'https://auto.ria.com/'
url = 'https://auto.ria.com/uk/newauto/marka-bmw/'
headers = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36",
"Accept" : "*/*"
}
def get_html (url,params=None):
r = requests.get(url=url,headers=headers,params = params)
return r
def get_contend(html):
soup = BS4(html,"html.parser")
items = soup.find_all(class_='na-gallery-view list-view')
cars = []
for item in items:
cars.append({
'title' : item.find(class_='link').text,
'link' : host + item.find(class_='proposition').find(class_="proposition_link").get('href'),
"price_in_dolar" : item.find(class_='proposition_price').find(class_='green bold size18').text.strip(),
"price_in_uah" : item.find(class_='proposition_price').find(class_='grey size13').text.strip(),
'location' : item.find(class_='proposition_region size13').find_next('strong').text,
})
print(cars)
def parse():
html = get_html(url)
if html.status_code == 200:
get_contend(html.text)
else:
print("Error 404")
parse()
Ответы (1 шт):
Автор решения: Jack_oS
→ Ссылка
По указанному адресу только один div с классом 'na-gallery-view list-view'.
Если в items нужно сохранить все карточки предложений на этой странице, то вам нужен блок с классом "proposition":
import requests
from bs4 import BeautifulSoup
url = 'https://auto.ria.com/uk/newauto/marka-bmw/'
headers = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36",
"Accept" : "*/*"
}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
items = soup.find_all('div', class_='proposition')
>>> len(items)
20
И код в цикле пересмотрите:
cars = []
for item in items:
cars.append({
'title' : item.find('h3', class_='proposition_name').text,
# и так далее
})