Vinnaren i pepparkakshustävlingen!
2022-04-20, 23:31
  #13
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av EastAreaPapist
Det är oftast smidigare att jobba med en dataframe. Du kan expandera listan med telefonnummer med explode och skriva till en excel-fil med to_excel.
Kod:
import pandas as pd

# read data
df = pd.DataFrame(data['items'])
# expand phoneNumbers (1 per row)
df = df.explode('phoneNumbers')
# write to excel
df[['id', 'name', 'phoneNumbers']].to_excel('telefon_nummer.xlsx')
Japp, givet att man vill spara alla personers telefonnummer och inte först lokalisera vem man vill åt
Citera
2022-04-20, 23:38
  #14
Medlem
EastAreaPapists avatar
Citat:
Ursprungligen postat av Enterprise
Japp, givet att man vill spara alla personers telefonnummer och inte först lokalisera vem man vill åt
Jag ska erkänna att jag inte har läst hela tråden. Jag fick intrycket att vad TS ville göra var just att skrapa telefonnummer från eniro och spara det hela som excelfiler. Men oavsett lär det ju vara smidigare att hantera en dataframe än en någon nestad röra av dicts och listor.
Citera
2022-04-21, 00:22
  #15
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Enterprise
Nej, det finns redan där
Det är alltså "nestade" objekt (dicts och arrays) som packats upp ur JSON-filen.

prova t.ex:
Kod:
print(data["items"][0]["phoneNumbers"]) 

För att få det första numret i item 0:
Kod:
print(data["items"][0]["phoneNumbers"][0]["phoneNumber"]) 
Finemang.
Tänkte försöka loopa igenom varje nummer i phoneNumber med
Kod:
for numbers in data["items"][0]["phoneNumbers"]:

Men får felet "list index out of range".
Tänkte att det skulle fungera rakt av då man torde kunna loopa genom en dict så, men vad kan det bero på?

Citat:
Ursprungligen postat av EastAreaPapist
Jag ska erkänna att jag inte har läst hela tråden. Jag fick intrycket att vad TS ville göra var just att skrapa telefonnummer från eniro och spara det hela som excelfiler. Men oavsett lär det ju vara smidigare att hantera en dataframe än en någon nestad röra av dicts och listor.
Nja, jag är rätt så säker på att det ska gå bra i lejonparten av fallen att plocka de första numren som dyker upp när jag söker på namn och adress. Särskilt om jag inkluderar postnummer torde det bli bombsäkert.

Å andra sidan tänkte jag vaska genom alla bolag på AllaBolag efter en särskilt detalj som en vän är intresserad av när jag pysslat färdigt med det här projektet, så det kan vara av intresse att hitta andra lösningar som gör just det bättre.
Så vad är en dataframe, förresten?

Ser att allabolag har ju en API-lösning, kanske är enklast att höra av sig till dem och se vad det kan kosta.
Å andra sidan skulle det vara roligt om det finns en gratis sniklösning på det.
__________________
Senast redigerad av Bonnatorp 2022-04-21 kl. 01:05.
Citera
2022-04-21, 01:30
  #16
Medlem
Bonnatorps avatar
Lite sen på redigeringen, men jag hittade iallafall felet.
Blev IP-blockad efter att ha försökt samma adress för många gånger, för att testa koden.

De var snabbare än jag trodde på att genomföra det.
Citera
2022-04-21, 16:32
  #17
Medlem
Bonnatorps avatar
Nu är jag lite fruktasvärd som trippelpostar, men hela faderullan med API löste sig iallafall.

Nu är allt löst och jag är på det sista steget, att iterera genom excellistan till den sista cellen med data i.
Hur gör man det med openpyxl? Jag förstår inte riktigt dokumentationen då den känns lite grötig.
Kruxet är att jag vill börja på en given rad, låt säga rad 565, och fortsätta till sista cellen med ett företagsnamn i.
__________________
Senast redigerad av Bonnatorp 2022-04-21 kl. 16:41.
Citera
2022-04-21, 20:31
  #18
Medlem
Jag kanske skulle ha läst denna tråd innan vi gav oss in och stökade runt i något utan sammanhang i nybörjartråden.

Till nästa gång:
Pandas är din vän!
Du slipper Json och Excell-drivare
Du slipper fibbla med nestade jsons
Du slipper manuellt leta efter saker.

I vilket fall, nedan är universalkoden för det mesta som nestad json spottar ut.
Ta bara bort print() och ersätt med någon annat. Lägg till en instanskontroll om det behövs.

Kod:
for key, value in data.items():
	if isinstance(value, list):
		for item in value:
			for key1, val1 in item.items():
				print(key1, val1)
	elif isinstance(value, dict):
		for key1, val1 in value.items():
				for item in val1:
					for key2, val2 in item.items():
						print(key2, val2)
Citera
2022-04-21, 20:43
  #19
Medlem
Citat:
Ursprungligen postat av Bonnatorp

Tänkte att det skulle vara omständigt att lära sig JSON också, men det var ju mycket simplare än vad jag antog.
Utmärkt lösning!


Nå... Efter en timmes bollande med mig hur man parsar dessa json, är det så mycket simplare?

mitt förslag ligger fortfarande på request som Enterprise har gett förslag på ---> pandas.DataFrame ----->Pandas.to_excell.

Du behöver inte bry dig om strukturen förrän du verkligen måste visa en tabell av denna hiskliga nestade soppa av dicts och lists.
Citera
2022-04-21, 20:50
  #20
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Methos
Nå... Efter en timmes bollande med mig hur man parsar dessa json, är det så mycket simplare?

mitt förslag ligger fortfarande på request som Enterprise har gett förslag på ---> pandas.DataFrame ----->Pandas.to_excell.

Du behöver inte bry dig om strukturen förrän du verkligen måste visa en tabell av denna hiskliga nestade soppa av dicts och lists.
Fast å andra sidan, jag har ett fungerande program för nummerkatalogisering av företag nu. Och det är det första riktiga projekt jag någonsin knappat på.
Krävs några sekunders pillande för att anpassa till andra excelfiler, och gissningsvis någon minut för att anpassa till personsök, om jag köper API-tjänsten.

Men jo, dataframes ska jag nog kika på då det inte skadar att utöka repertoaren.
Citera
2022-04-21, 20:56
  #21
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Fast å andra sidan, jag har ett fungerande program för nummerkatalogisering av företag nu. Och det är det första riktiga projekt jag någonsin knappat på.
Krävs några sekunders pillande för att anpassa till andra excelfiler, och gissningsvis någon minut för att anpassa till personsök, om jag köper API-tjänsten.

Men jo, dataframes ska jag nog kika på då det inte skadar att utöka repertoaren.

Så skönt att det löste sig. Jag satt som du och gjorde parsingen manuellt när jag skulle göra ett program som tog ned vissa uppgifter från myndighetssidor. Efter tre försök där programmet hängde sig (för många loopar) så tog jag tiden att göra det i Pandas. Pandas skriver ut sakerna bra, kan importera varje standardformat och kan skriva till varje standardformat. Eftersom att Pandas är ett paket för datanördar (inte datornördar) så behandlar den uppgifter smidigt och du kan kalla på en uppgift som om du kallade på en SQL-databas.
Citera
2022-04-21, 22:16
  #22
Medlem
seppolundgrens avatar
Citat:
Ursprungligen postat av EastAreaPapist
Det är oftast smidigare att jobba med en dataframe. Du kan expandera listan med telefonnummer med explode och skriva till en excel-fil med to_excel.

Måste man inte först skapa en csv bok?

Citat:
namn = pd.DataFrame([['a', 'b'], ['c', 'd']],
... index=['row 1', 'row 2'],
... columns=['col 1', 'col 2'])
namnto_excel("excelfil.xlsx")


är ny på pandas så jag skulle kunna vara helt ute o cykla
Citera
2022-04-21, 22:18
  #23
Medlem
seppolundgrens avatar
Citat:
Ursprungligen postat av Enterprise
Du kan sedan använda t.ex. Beautiful Soup för att "parsa" HTML-koden som Curl-anropet presterar.

Edit: Du kan eventuellt få till samma resultat med Eniro om du gräver lite i hur den sidan är uppbyggd, ett försök nedan som funkar i min browser (men inte i curl), kanske beror på session_id eller liknande cookie:
Kod:
https://www.eniro.se/api/cs?device=desktop&query=sven%20svensson&sortOrder=default&profile=se&page=1&lat=0&lng=0&limit=25&review=0&webshop=false&client=true

Jag curlar på en cpanel, vad är maxanrop per (sekund,minut,timme)?
Bör jag hålla mig till var 30e sekund ?
Citera
2022-04-22, 00:47
  #24
Medlem
EastAreaPapists avatar
Citat:
Ursprungligen postat av seppolundgren
Måste man inte först skapa en csv bok?




är ny på pandas så jag skulle kunna vara helt ute o cykla
Jag tror inte att jag förstår frågan. Koden i ditt inlägg skapar en dataframe och skriver den till en excel-fil.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback