Я создавал парсер сайтов на питоне и у меня возникла ошибка.
Писал простой парсер который просматривал авито и у меня возникла ошибка
1
IndexError: list index out of range
при таком коде
1234567891011121314151617181920212223242526272829303132333435363738
from bs4 import BeautifulSoup
import requests
from requests import get
import time
import random
url = 'ttps://www.avito.ru/lipetsk/kvartiry/sdam/na_dlitelnyy_srok-ASgBAgICAkSSA8gQ8AeQUg?cd=1&rn=25934&p='
houses = []
count = 1
while count <= 5:
url = 'ttps://www.avito.ru/lipetsk/kvartiry/sdam/na_dlitelnyy_srok-ASgBAgICAkSSA8gQ8AeQUg?cd=1&rn=25934&p=' + str(count)
print(url)
response = get(url)
html_soup = BeautifulSoup(response.text, 'html.parser')
house_data = html_soup.find_all('div', class_="item_line")
if house_data != []:
houses.extend(house_data)
value = random.random()
scaled_value = 1 + (value * (9 - 5))
print(scaled_value)
time.sleep(scaled_value)
else:
print('empty')
break
count += 1
print(len(houses))
print(houses[0])
print()
n = int(len(houses)) - 1
count = 0
while count <= 5: # count <= n
info = houses[int(count)]
price = info.find('span', {"class": "snippet-price"}).text
title = info.find('a', {"class": "snippet-link"}).text
print(title, ' ', price)
count += 1
По дате
По рейтингу
Задержки надо вставлять, чтобы имитировать браузер:
12345678910111213141516171819202122232425262728293031323334
from bs4 import BeautifulSoup
import requests
import time
import random
base_url = 'h ttps://www.avito.ru/lipetsk/kvartiry/sdam/na_dlitelnyy_srok-ASgBAgICAkSSA8gQ8AeQUg?cd=1&rn=25934&p='
houses = []
count = 1
while count <= 5:
url = base_url + str(count)
print(url)
response = requests.get(url)
html_soup = BeautifulSoup(response.text, 'html.parser')
house_data = html_soup.find_all('div', class_="item_line")
if house_data != []:
houses.extend(house_data)
value = random.random()
scaled_value = 1 + (value * (9 - 5))
print(scaled_value)
time.sleep(scaled_value)
else:
print('No data on this page')
break
count += 1
print(len(houses))
print()
for info in houses:
price = info.find('span', {"class": "snippet-price"}).text
title = info.find('a', {"class": "snippet-link"}).text
print(title, ' ', price)
Обращаешься по несуществующему индексу
Больше по теме