Vinnaren i pepparkakshustävlingen!
2022-05-03, 23:03
  #85
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av fnirp
Ett tips är att ta ett sidosteg nästa gång, så slipper du blocka.

Ladda hem resultatet du fick av anropet, släng ner det i en lokal fil och kör resten av utvecklingen mot filen, inte mot eniro direkt. Då blir det inte mer än ett anrop under utvecklingstiden och några varningsklockor ringer inte hos Eniro. När du fått till det med hur du suger ur all information ur svaret på rätt sätt, så kan du återgå till att hämta från Eniro.

Alternativt, använd dig av någon vpn-tjänst när du utvecklar, så ditt eget ip inte blir spärrat.
Bra poäng. Om sidan som man vill "scrapa" är uppbyggd på så sätt att man kan undvika många anrop, så är det givetvis bättre att spara ner en gång och hämta data ur lokal fil.
Citera
2022-05-04, 17:10
  #86
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Enterprise
Bra poäng. Om sidan som man vill "scrapa" är uppbyggd på så sätt att man kan undvika många anrop, så är det givetvis bättre att spara ner en gång och hämta data ur lokal fil.
Har skaffat roterande proxy nu. Lite slö vid första anropet, men sedan kommer den igång.

Men det trilskas lite ändå.

Det gick snabbt så in i norden ett tag (skulle kunna söka av alla 1,6 miljoner företag i sverige på knappt en månad i den takten om jag fortsatte hålla det helt enkeltrådat med en enda instans åt gången), men då sidan inte laddade plötsligt ändå så testade jag runt lite, och det visade sig att trots att IP:n ska förnyas vid varje anrop jag gör så visar det sig att den bara förnyas varje gång jag startar en ny instans av chrome. Intuitivt tänker jag att jag måste stänga ner instansen och starta om det typ var femte sökning eller så (då det tar så lång tid för den att komma igång), men det trilskas ändå.
När jag startar om en ny instans så vill inte nästa sökning gå igång av någon orsak, då allt bara stannar av utan felkod.

Är det något du kanhända har en smidig lösning på?
Går det på något sätt förnya nuvarande instans på något sätt som löser det eller så?
Eller måste man på något sätt ange manuellt att selenium ska göra en ny request i samma instans? Jag trodde varje enskild laddning av en sida var det.

Edit: Rackarns, där blev min excelfil korrupt när jag äntligen hade kommit upp i 5000 företag, och jag hade ingen backup.
Antingen är det openpyxl som muppat sig, eller så slets optanedisken ut i förtid av för många skrivningar. (runt 140 stycken hittills).
Får väl lösa det med ramdisk och hoppas inte datorn kraschar.
Jaja, nu när jag har roterande proxy så kan jag iallafall hamra järnet utan sleep tills det säger stopp, medans jag söker efter lösningar, så funkar det igen vid omstart.
__________________
Senast redigerad av Bonnatorp 2022-05-04 kl. 18:02.
Citera
2022-05-04, 19:00
  #87
Medlem
Offices avatar
En liten fråga bara, har inte skummat igenom tråden, men varför använder du Excel? Tänker att när du ändå håller på med Python så finns det ju andra alternativ. Jag håller aldrig på med Excel så det kanske är jättebra eller det kanske finns någon stor fördel med det?

Sen kanske du inte ska skriva till endast en fil, utan istället kanske samla in 1000 företag, spara i en fil, samla in 1000 till och spara i nästa o.s.v.
Citera
2022-05-04, 19:21
  #88
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Office
En liten fråga bara, har inte skummat igenom tråden, men varför använder du Excel? Tänker att när du ändå håller på med Python så finns det ju andra alternativ. Jag håller aldrig på med Excel så det kanske är jättebra eller det kanske finns någon stor fördel med det?

Sen kanske du inte ska skriva till endast en fil, utan istället kanske samla in 1000 företag, spara i en fil, samla in 1000 till och spara i nästa o.s.v.
Ja huvudsakligen är det för att det är det enda jag lärt mig arbeta mot, och jag behöver spara resultatet hittills någonstans med jämna mellanrum ifall koden stöter på ett fel eller stannar av annan orsak. Första gången jag gjorde det här, när jag sammanställde filerna i fråga, så genererade jag fyra stycken 15.000 objekt långa listor inuti python som jag slutligen itererade genom och sparade till excel.
Väldigt riskfyllt om det inte varit för att kommunernas företagsregister är väldigt stabila att scrapa.

Sedan är det väldigt praktiskt att jobba mot då jag har en lista på 15.000 företag och först och främst bara vill söka de företag som har ett särskilt antal anställda enligt företagsregistret (vilket jag har i en kolumn, men det saknas för rätt så många varvid man kan utgå från att det är enskilda firmor), eftersom det är enkelt att sortera fram dessa eller leta vilka rader som har så många anställda i excel.
För närvarande så sorterar jag bara enligt antal anställda och kör dokumentet från toppen, och när jag ska till ett annat intervall så markerar jag de raderna som start och stop för iterationen.
Hade excel bara varit snabbare på att jobba med sådana jättefiler så hade det varit perfekt.
Det går normalfort att scrolla med mushjulet, men att dra scrollbaren för snabbare översikt är rätt så segt trots att filen knappt är 1MB.

Eftersom jag fortfarande är i det stadiet att koden stannar av rätt så frekvent så behöver jag ha snabb översikt över hur mycket som bearbetats så att jag kan fortsätta programmet därifrån.

Har tagit lärdom av det nu och ska stanna av programmet då och då och ta backup om filen inte är korrupt.
Kanske torde koda in att den gör nya separata kopior för var 1000:e iteration nu när jag tänker på det, istället för att bara traggla på samma dokument och göra manuella kopior.
Slitage är ju ingen fara nu när jag ramdiskar.

Men nu har den jobbat genom 300 företags nummer och bokslut på 10 minuter utan problem, så jag hyser gott hopp till att det mesta är ordnat nu.

Nästa steg är nog att dela upp det hela i separata filer och köra flera instanser (trådar?) samtidigt. Undrarns hur jag ska automatisera det bäst.
Kanske är enklast att köra en instans av programmet via powershell för varje dokument. Blir en del manuellt arbete, men ändå inte så farligt då det bara blir typ 4 filer per kommun, och jag tänkte inte köra hela Sverige riktigt än även om det hägrar då jag gärna vill ha en jättefil att låta tensorflow brottas med när jag sätter mig med det.

Men det är något fnul här, så nu är filen korrupt igen.
Excel vägrar ta den, men google sheets och libreoffice fungerar.
Verkar vara något knepigt med openpyxl.
__________________
Senast redigerad av Bonnatorp 2022-05-04 kl. 20:14.
Citera
2022-05-04, 22:10
  #89
Medlem
Offices avatar
Citat:
Ursprungligen postat av Bonnatorp
Ja huvudsakligen är det för att det är det enda jag lärt mig arbeta mot, och jag behöver spara resultatet hittills någonstans med jämna mellanrum ifall koden stöter på ett fel eller stannar av annan orsak. Första gången jag gjorde det här, när jag sammanställde filerna i fråga, så genererade jag fyra stycken 15.000 objekt långa listor inuti python som jag slutligen itererade genom och sparade till excel.
Väldigt riskfyllt om det inte varit för att kommunernas företagsregister är väldigt stabila att scrapa.

Sedan är det väldigt praktiskt att jobba mot då jag har en lista på 15.000 företag och först och främst bara vill söka de företag som har ett särskilt antal anställda enligt företagsregistret (vilket jag har i en kolumn, men det saknas för rätt så många varvid man kan utgå från att det är enskilda firmor), eftersom det är enkelt att sortera fram dessa eller leta vilka rader som har så många anställda i excel.
För närvarande så sorterar jag bara enligt antal anställda och kör dokumentet från toppen, och när jag ska till ett annat intervall så markerar jag de raderna som start och stop för iterationen.
Hade excel bara varit snabbare på att jobba med sådana jättefiler så hade det varit perfekt.
Det går normalfort att scrolla med mushjulet, men att dra scrollbaren för snabbare översikt är rätt så segt trots att filen knappt är 1MB.
Om du är sugen på maskininlärning och sådant så är ett tips att börja så smått med Pandas i Python. Du kan vad jag vet inte scrolla och få en överblick (ganska meningslöst ändå med 15 000 rader) men om du skriver att Excel är segt med 15 000 rader så behöver du som jämförelse komma upp i några miljoner rader innan du märker att det inte går blixtsnabbt att exempelvis sortera raderna.

Exempel: https://postimg.cc/MMH7R8V3

Sen kan du superduperlätt spara den som en csv (csv är ju väldigt generellt, kan öppnas av "allt"). Det finns så klart mer "High tech" sätt att spara och exportera men med tanke på att du kanske ska ha ett par tiotusentals rader så behövs det inget krångligare än så.

Är du seriös med din Tensorflow-grej så kommer lite grundläggande kunskaper i Pandas vara väldigt värdefullt.
Citera
2022-05-05, 00:03
  #90
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Office
Om du är sugen på maskininlärning och sådant så är ett tips att börja så smått med Pandas i Python. Du kan vad jag vet inte scrolla och få en överblick (ganska meningslöst ändå med 15 000 rader) men om du skriver att Excel är segt med 15 000 rader så behöver du som jämförelse komma upp i några miljoner rader innan du märker att det inte går blixtsnabbt att exempelvis sortera raderna.

Exempel: https://postimg.cc/MMH7R8V3

Sen kan du superduperlätt spara den som en csv (csv är ju väldigt generellt, kan öppnas av "allt"). Det finns så klart mer "High tech" sätt att spara och exportera men med tanke på att du kanske ska ha ett par tiotusentals rader så behövs det inget krångligare än så.

Är du seriös med din Tensorflow-grej så kommer lite grundläggande kunskaper i Pandas vara väldigt värdefullt.
Jo, det får nog bli en övergång till pandas.
Ska bara köra färdigt den här enskilda kommunen och se vad jag kan få för listan (jaja, det är lite oetiskt att sälja scrapad företagsdata) innan jag börjar optimera allt för mycket.

Däremit har jag en fundering, som är giltigt oavsett om jag använder pandas eller openpyxl.
Har hela min kod (lite uppdaterad sedan dess, men överlag samma struktur) i ett tidigare inlägg.
(FB) Webscraping och excelintegrering

Hur kan jag göra detta multitrådat, och dessutom få selenium att gå med på det?
Testade göra två separata pythonfiler och köra mot två separade listor, och köra dessa i varsin instans av powershell (ja, ett extremt osofistikerat försök till multitrådning), men den andra instansen fick ett error på anslutningen.
Min proxy tillåter upp till tio trådar, så det bör inte vara det.

Behöver jag bara kapsla in hela programmet som sådant i en funktion och köra funktionen i olika trådar samtidigt som jag sätter olika filnamn (för datalistorna) som argument för funktionerna, eller är det klurigare än så?

Att köra flera webdriverinstanser bör inte vara några problem rent prestandamässigt, har en 3700x och 64GB RAM.

Jag testade att sätta hela rasket i funktionen all(), och följde det av detta:
Kod:
if __name__ == "__main__":
    # creating thread
	t1 = threading.Thread(target=all, args=(1089, 3081, 1))
	t2 = threading.Thread(target=all, args=(1, 640, 2))
	t3 = threading.Thread(target=all, args=(1, 143, 3))
	t4 = threading.Thread(target=all, args=(10, 9818, 4))

	t1.start()
	t2.start()
	t3.start()
	t4.start()
Men får samma fel när en hemsida ska hämtas på någon av de tre övriga instanserna.
"Message: unknown error: net::ERR_CONNECTION_RESET" när driver.get(url) körs.
__________________
Senast redigerad av Bonnatorp 2022-05-05 kl. 01:02.
Citera
2022-05-05, 13:45
  #91
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Hur kan jag göra detta multitrådat, och dessutom få selenium att gå med på det?
Testade göra två separata pythonfiler och köra mot två separade listor, och köra dessa i varsin instans av powershell (ja, ett extremt osofistikerat försök till multitrådning), men den andra instansen fick ett error på anslutningen.
Min proxy tillåter upp till tio trådar, så det bör inte vara det..

Python är inte riktigt det språk som är lämpligt för multiprocesser och trådar. Och jag finner flera orosmoment med ditt projekt om du multitrådar: Det ena är Python ökända GLock som gör att du genetligen bara kan köra en instruktion åt gången. Det andra är att threading kan göra så att du får problem med scrapingen då varje tråd inte håller koll på vad som egentligen är skrapat.

OM jag någonsin skulle tänka multithread här skulle jag använda acyncio, sedan skulle jag göra en generator av scrapingen så att varje "process" hämtar en instruktion. Men Asyncio är väldigt marigt att hålla på med.
Citera
2022-05-05, 14:32
  #92
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Methos
Python är inte riktigt det språk som är lämpligt för multiprocesser och trådar. Och jag finner flera orosmoment med ditt projekt om du multitrådar: Det ena är Python ökända GLock som gör att du genetligen bara kan köra en instruktion åt gången. Det andra är att threading kan göra så att du får problem med scrapingen då varje tråd inte håller koll på vad som egentligen är skrapat.

OM jag någonsin skulle tänka multithread här skulle jag använda acyncio, sedan skulle jag göra en generator av scrapingen så att varje "process" hämtar en instruktion. Men Asyncio är väldigt marigt att hålla på med.
Fast jag tänkte hålla listorna isär då, genom att ha det som argument för varje tråd.
Tänkte mig något i stil med
Kod:
if __name__ == "__main__":
	t1 = threading.Thread(target=all, args=(1261, 9440, 4))
	t1.start()
där argumenten består av startrad, stopprad, och vilket dokument det gäller, och varje tråd innehåller precis hela programmet med funktionerna nestade i funktionen all(start, stop, dokument).

Däremot får jag ändå "Message: unknown error: net::ERR_CONNECTION_RESET" på de övriga trådarna. Vet inte vad det beror på, men det är precis samma fel som när min roterande proxy inte hade blivit aktiverad än.
Men proxyn ska ta upp till tio trådar, så det bör inte bero på det.

Jaja projektet hamnar lite på is då listorna i fråga inte var av intresse för företaget jag hade i åtanke just nu. Möjligen senare.
Dessutom blev jag tipsad om en CRM-tjänst som hade extremt konkurrenskraftiga priser, så det får nog hålla sig på nivån att jag använder det för bara nummersökning av mina befintliga excellistor på jobbet. Och de brukar inte vara mer än 300 namn långa, går på knappt en kvart.
__________________
Senast redigerad av Bonnatorp 2022-05-05 kl. 14:36.
Citera
2022-05-05, 23:42
  #93
Medlem
EastAreaPapists avatar
Har du något att vinna på att multitråda det här? Jag gissar (utan att ha lusläst din kod) att du begränsas av hur många anrop du kan göra utan att bli ip-bannad och ändå måste lägga in någon manuell delay för att hantera det.

Angående att spara datan är det väldigt enkelt att komma igång med sqllite. Det kan vara värt att titta på, speciellt om det här är något av ett lära-sig-att-koda-projekt. Alla "måste" kunna lite sql.
Citera
2022-05-06, 07:00
  #94
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av EastAreaPapist
Har du något att vinna på att multitråda det här? Jag gissar (utan att ha lusläst din kod) att du begränsas av hur många anrop du kan göra utan att bli ip-bannad och ändå måste lägga in någon manuell delay för att hantera det.

Angående att spara datan är det väldigt enkelt att komma igång med sqllite. Det kan vara värt att titta på, speciellt om det här är något av ett lära-sig-att-koda-projekt. Alla "måste" kunna lite sql.
Jodå, hade en roterande IP.

Men projektet hamnar som sagt på is lite nu. Måste fokusera på spanskan på komvux så jag inte tappar studiemedlet.
Citera
2022-05-06, 22:50
  #95
Medlem
Hade det gått att göra detta med verktyg som Puppeteer?
Citera
2022-05-06, 23:05
  #96
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av janblommgren
Hade det gått att göra detta med verktyg som Puppeteer?
Puppeteer är väl att likställa med Selenium, så ja det borde gå på samma sätt.
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