Я очищаю свой местный сайт для аренды / покупки квартир и записываю их в файл Excel. Количество рекламных объявлений на сайте составляет около 9500, но мой скребок перестает работать правильно после примерно 1000, а затем, по-видимому, очищает только одно добавление на страницу.
Я добавил
prink(link)
в цикле, так что он показывает мне, над какой страницей он сейчас работает.
вот результат:
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=34
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=34
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=34
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=34
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=34
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=34
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=35
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=36
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=37
https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?strona=38
После страницы 34 загружается только одно дополнение на страницу.
Я попытался изменить диапазон на 50,100 / 100,150 и т. Д., Но он вел себя аналогично, после примерно 25-30 страниц он вел себя как выше.
from bs4 import BeautifulSoup
from requests import get
import pandas as pd
import itertools
import matplotlib.pyplot as plt
headers = ({'User-Agent':
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'})
tytuly = []
lokalizacje = []
Ceny = []
Ceny_m = []
Powierzchnie = []
L_pokoi = []
Pietra = []
rok_budowy = []
strona = 0
numer = 0
for strona in range(0,50):
strona +=1
link = 'https://ogloszenia.trojmiasto.pl/nieruchomosci-rynek-pierwotny/?' + 'strona=' + str(strona)
r = get(link, headers = headers)
zupa = BeautifulSoup(r.text, 'html.parser')
ogloszenia= zupa.find_all('div', class_="list__item")
print(link)
for ogl in ogloszenia:
try:
tytul = ogl.find_all('h2', class_ ="list__item__content__title")[0].text
except IndexError:
tytul = ''
try:
powierzchnia = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[0].text
except IndexError:
powierzchnia = ''
try:
liczba_pok = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[1].text
except IndexError:
liczba_pok = ''
try:
pietro = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[2].text
except IndexError:
pietro = ''
try:
if pietro == '':
rok = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[2].text
else:
rok = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[3].text
except IndexError:
rok = ''
try:
lokalizacja = ogl.find_all('p', class_ = "list__item__content__subtitle")[0].text
except IndexError:
lokalizacja = ''
try:
cena = ogl.find_all('p', class_ = "list__item__price__value")[0].text
except IndexError:
cena = ''
try:
cena_m = ogl.find_all('p', class_ = "list__item__details__info details--info--price")[0].text
except IndexError:
cena_m = ''
print(link)
sys.getsizeof(tytuly)
tytuly.append(tytul)
lokalizacje.append(lokalizacja)
Ceny.append(cena)
Ceny_m.append(cena_m)
Powierzchnie.append(powierzchnia)
Pietra.append(pietro)
L_pokoi.append(liczba_pok)
rok_budowy.append(rok)
kolumny = ["Tytul","Lokalizacja","Cena","Cena za metr","Powierzchnia","Pietro","Liczba pokoi","Rok budowy"]
zrzut = pd.DataFrame({"Tytul": tytuly,
"Lokalizacja": lokalizacje,
"Cena": Ceny,
"Cena za metr": Ceny_m,
"Powierzchnia": Powierzchnie,
"Pietro": Pietra,
"Liczba pokoi": L_pokoi,
"Rok budowy": rok_budowy})[kolumny]
zrzut.to_excel('rynek_pierwotnyy.xls')
Я предполагаю, что списки перегружены, и поэтому он ведет себя так. Я думаю, может быть, очистка списков и экспорт в Excel после каждого цикла поможет? Но если я сделаю это так, мне придется добавить файл Excel.