我正在刮擦本地站点以出租/购买公寓,并将其写入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文件。
答案 0 :(得分:2)
我尝试了0-50和0-100范围内的代码,它可以正常工作。也许问题出在互联网或网页加载上。请尝试使用time.sleep()。希望它能对您有所帮助。