Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  2 5012
Heisann, jeg prøver å scrape boligannonser fra finn med Python og BeautifulSoup, og har kommet ganske langt.

Kode

def scrape(link):
	r1 = requests.get('https://www.finn.no' + link)
	coverpage = r1.content
	soup1 = BeautifulSoup(coverpage, 'html.parser')
	linker = soup1.find_all( class_='definition-list')

	for n in range(1,len(linker)):
		statestikk.append(linker[n].get_text(" ", strip=True))
Om jeg da kjører print statestikk[1] feks vil jeg få ut

Kode

Boligtype Enebolig Eieform Eier (Selveier) Soverom 3 Primærrom 104 m² Bruksareal 126 m² Byggeår 1958 Energimerking D - oransje Rom 4
Spørsmålet mitt er hvordan jeg da kan få ut boligtypen, eieformen, antall soverom osv på en fornuftig måte. De fleste boligene har forskjellig statestikk, så nytter ikke splitte stringen og deretter ta indeksen, det må søkes spesifikt etter "Boligtype" og deretter må neste ord tas.

hvordan kan jeg løse dette på en fornuftig måte?
Nå er det lenge siden jeg har puslet med BS, men kan du ikke angi en annen delimiter enn mellomrom i get_text-funksjonen, og så splitte på den?
Altså:

Kode

linker[n].get_text("|", strip=True).split("|")
Siden finn har en fin liste kan du jo bare parse den.

Kode

r = requests.get(url)

p = BeautifulSoup(r.content, "html.parser")

lol = p.find_all("dl", {"class": "definition-list"})
a = lol[2].find_all("dt")
b = lol[2].find_all("dd")

out = {}
for i in range(len(a)):
    out[a[i].text] = b[i].text

print(out)
Sist endret av Goophy; 24. mars 2020 kl. 22:39.