Python leren voor webscraping: Beautiful Soup of Scrapy?

Pagina: 1
Acties:
  • 3.058 views

Vraag


Acties:
  • 0 Henk 'm!

  • leipe annie
  • Registratie: November 2011
  • Laatst online: 01-10 09:05
Hoi allemaal,

Ik wil graag python leren om een webscraper te bouwen. Ik heb een webscraper nodig voor een hobbieproject. Een kennis van mij heeft al een webscraper gebouwd in Python met Beautiful Soup, dat werkt opzich goed, maar de scraper heeft ruim een drie kwartier nodig om te scrapen en ik zou graag zien dat dit sneller gaat. Daarnaast is die scraper ook afhankelijk van een aantal andere 'pakketten/libraries' zoals panda's

Nu ik zelf aan python wil beginnen, heb ik wat onderzoek gedaan naar webscraping met python en in die zoektocht kwam ik ook scrapy en selenium tegen. Ik heb de pro's en con's gelezen maar blijf toch met een vraag zitten.

Ik twijfel met welk 'pakket' ik een scraper wil gaan bouwen. Beautiful Soup zou makkelijker moeten zijn, maar Scrapy beter/sneller. Scrapy zou daarintegen wel (veel) moeilijker te leren zijn. Selenium leek mij het minst geschikt omdat het van origine geen scrape 'pakket' is

Ik ben op zoek naar advies van iemand die ervaring heeft met webscapring in python die mij kan adviseren wat ik het beste als eerste kan leren, meteen scrapy of gewoon beautiful soup. Ik heb verder geen ervaring met coderen.

Alle reacties


Acties:
  • 0 Henk 'm!

Verwijderd

Selenium.

Daarmee kun je namelijk ook client side rendered websites scrapen. Selenium vereist wel vele maten meer CPU/Memory om te scrapen. Het alternatief is bij de client side rendered websites de api gaan reverse engineeren.

Grootste nadeel van selenium is wel dat je zelf multithreading en/of async moet gaan implementeren waar dat met Scrapy ingebouwd zit.

EDIT:
Over hoeveel pagina's/websites gaat het?

[ Voor 7% gewijzigd door Verwijderd op 03-10-2020 23:08 ]


Acties:
  • 0 Henk 'm!

  • leipe annie
  • Registratie: November 2011
  • Laatst online: 01-10 09:05
Hoi @Verwijderd , Bedankt voor je reactie.

Het gaat om 5 tot 10 websites waarbij 30 tot 200 pagina's gescraped moeten worden. Het gaat hierbij om de product data.

Mijn huidige scraper ( die gebouwd is door een kennis ) draait nu op een Raspberry Pi 3B. Dus heel veel CPU/Memory heb ik nu niet. Ik zag wel dat ik ook python via mijn hosting kan draaien, waardoor ik meer cpu en memory tot mijn beschikking heb.

api's reverse engineeren klinkt als een nog verder weg van mijn bed show dan python leren.

Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Selenium is een stuk zwaarder en dat is omdat je een browser gaat draaien die alles binnen hengelt. Ik zou dat dus niet zo maar pakken als je alleen wilt scrapen.

Je hebt het over 5 tot 10 websites, 30 tot 200 pagina's. Dus laten we uit gaan van 2000 pagina's voor nu. Hoe vaak gaat die scraper draaien? Want als het maar 1 keer per dag is dan maakt het niet uit of je scrapy of beautifulsoup pakt. Dat moet in beide gevallen ruim op tijd klaar zijn. Makkelijk. Wil je het elke 5 minuten doen, dan pas moet je echt gaan nadenken over performance. Als je verwacht dat je in de toekomst veel meer pagina's moet gaan scrapen geld hetzelfde.

Tenzij performance echt een probleem is zou ik gaan voor hetgeen het makkelijkste lijkt te werken. Zeker als je nog bezig bent met het leren van python.

Acties:
  • 0 Henk 'm!

  • leipe annie
  • Registratie: November 2011
  • Laatst online: 01-10 09:05
@Gropah, bedankt voor je antwoord.

Ik gebruik de scrapers om een prijsvergelijkertje te bouwen die de prijzen op de website laat zien. De scrapers hoeven maar 1x per dag te draaien, het liefst laat in de avond/nacht, Daarna moet de website die data ophalen en importeren, zodat de prijzen in de ochtend bijgewerkt zijn.

Mocht ik dalijk 10 scrapers hebben (voor elke website een) die allemaal 45 minuten nodig hebben, dan wordt snelheid dus wel een dingetje. Misschien kan ik ze wel tegelijkertijd laten draaien op een sneller systeem dan de raspberry waar ik het nu op draai.

Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Als je 10 scrapers zou hebben voor 200 pagina's en die doen er 45 minuten over, dan kan het alsnog makkelijk binnen een dag. Daarnaast is 200 pagina's in 45 minuten, 4 pagina's per minuut. Dat is bar weinig.

Ik heb net een eigen scrape projectje getimed die een pagina laad, parset met beautifulsoup en het resultaat daar van tweet. Ongeveer 60% van de tijd was hij bezig met het binnenhalen van de pagina (wat je niet kunt echt versnellen met betere hardware) met een totale runtime van ongeveer een seconde. Maar stel dat het 2 seconde per pagina is, dan kun je in een dag alsnog meer dan 40.000 pagina's doen. Jij wilt er 2000 per dag doen.

Ik schat dat je voorlopig het prima op een pi kan laten draaien als je wilt ;)

Acties:
  • 0 Henk 'm!

  • Tk55
  • Registratie: April 2009
  • Niet online
@Gropah Vaak ben je de meeste tijd kwijt aan wachten op een reactie van de server of het downloaden van de pagina. Als dat een issue wordt kun je altijd nog threading of async gebruiken, dat scheelt een heleboel tijd.

Zoals je zegt, is dat in dit geval waarschijnlijk niet nodig. Ook is het conceptueel en technisch een stuk ingewikkelder. Niet iets voor beginners dus.

Een RPI is ook snel zat voor basic scraping.

@leipe annie Je zou beiden libraries kunnen proberen en kijken welke het meeste bevalt. Bouw met beiden libraries een scraper voor verschillende (of dezelfde) websites. Zo leer je er ook een hoop van.

Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
kan je niet beter gewoon een kant en klaar webscrape programma kopen?
Vind het altijd raar, met software is er altijd bepaalde groep, oh maak ik ff zelf.

Acties:
  • 0 Henk 'm!

  • leipe annie
  • Registratie: November 2011
  • Laatst online: 01-10 09:05
Hoi @Tk55 ,

Experimenteren met beide libraries is denk ik op dit moment het beste advies. Ik wil uiteindelijk vooral python leren door iets functioneels te bouwen. Ik denk dat ik daarom morgen maar eens ga beginnen aan een scraper bouwen met beatiful soup en daarna met scrapy, aangezien dat lastiger te leren zou zijn.

Ik hoopte met het openen van dit topic op een duidelijk geluid dat ik wel/niet voor beatiful soup of scrapy zou moeten kiezen. Maar wat ik proef uit jullie reacties is dat het op dit moment eigenlijk niet veel uit maakt voor mijn projectje.

Bedankt voor jullie reacties, ik ga komende regenachtige dagen eens lekker aanmodderen met python!

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:59
Mwah je wilt ook de te scrapen websites doorgaans ook niet plathameren, dus al te snel de handel binnenslurpen is ook niet lief. Maar je kunt die 10 sites natuurlijk wel parallel scrapen.
Ik zou zelf als het kan voor requests / beautifulsoup gaan als het kan. Selenium als last resort als webpagina's al te veel weerstand bieden tegen scrapen (javascript vereisten etc).

Scrapy vond ik niet echt intuitief, zit wel leuk in elkaar, maar het paste niet echt bij mijn iteratief schrijven en uitproberen.

Heb je wel enige ervaring / idee van HTML, http, eventueel forms etc. Of is ook dat nog nieuw ?
Als je nog nooit geprogrammeerd hebt is het wellicht wel verstandig om eerst een stukje basis python uit een boek / tutorial te halen. De basis qua datastructuren (variabelen, lists, dicts) en control loopjes function calls etc. is toch wel een minimum denk ik wil je de examples van libraries als requests en beautifulsoup een beetje kunnen begrijpen en voor je eigen doel kunnen inzetten.

[ Voor 46% gewijzigd door gekkie op 04-10-2020 01:07 ]


Acties:
  • +5 Henk 'm!

  • leipe annie
  • Registratie: November 2011
  • Laatst online: 01-10 09:05
mvrhrln schreef op zondag 4 oktober 2020 @ 00:36:
kan je niet beter gewoon een kant en klaar webscrape programma kopen?
Vind het altijd raar, met software is er altijd bepaalde groep, oh maak ik ff zelf.
Ik weet al hoe ik mijn creditcard moet gebruiken. Python wil ik graag leren, daarom wil ik het zelf maken.

[ Voor 5% gewijzigd door leipe annie op 04-10-2020 00:40 ]


Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
Ja wil je nu webscrapen of python leren?
oh of wil je hier alleen laten weten dat je python wilt leren :) ?

je vraag klink een beetje ik wil Russisch (vul iedere andere vreemde taal in) leren om de weg te vragen.

"Ik heb verder geen ervaring met coderen.-"

[ Voor 87% gewijzigd door mvrhrln op 04-10-2020 00:49 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:59
mvrhrln schreef op zondag 4 oktober 2020 @ 00:43:
Ja wil je nu webscrapen of python leren?
oh of wil je hier alleen laten weten dat je python wilt leren :) ?
Staat toch allemaal in de openingspost: Beide en de vraag was wat het handigste is om mee te beginnen als opzet vanuit z'n begin onderzoek van wat er zoal beschikbaar is ?

Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
gekkie schreef op zondag 4 oktober 2020 @ 00:49:
[...]

Staat toch allemaal in de openingspost: Beide en de vraag was wat het handigste is om mee te beginnen als opzet vanuit z'n begin onderzoek van wat er zoal beschikbaar is ?
Misschien zijn er makkelijkere manieren om tot het doel te komen ???

Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
leipe annie schreef op zondag 4 oktober 2020 @ 00:39:
[...]


Ik weet al hoe ik mijn creditcard moet gebruiken.
Nou, dat is al heel wat.

@gekkie legt je de rest wel uit.

[ Voor 8% gewijzigd door mvrhrln op 04-10-2020 00:56 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:59
Er staat toch vrij letterlijk dat het twee subdoelen zijn, waarbij het scrapen zowel een direct doel dient, als wel uitdaging is om de taal te leren door iets zinnigs te maken. Iets kopen met een creditcard lijkt aan geen van beide doelen te voldoen en het dus ook niet makkelijker te maken om tot beide doelen te komen, vandaar dat ik je suggestie niet bepaald snap (laat staan het enigzins hoogmoedige "Nou, dat is al heel wat.").

Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
toppie

"Ik heb verder geen ervaring met coderen.--"

[ Voor 138% gewijzigd door mvrhrln op 04-10-2020 01:03 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:59
Er is maar één manier om dat te krijgen, lezen en doen, samengevat als leren. Een goed boek helpt daar bij een leuk behapbaar projectje naast de soms wat saaie examples in een boek ook.

Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
gekkie schreef op zondag 4 oktober 2020 @ 01:12:
Er is maar één manier om dat te krijgen, lezen en doen, samengevat als leren. Een goed boek helpt daar bij een leuk behapbaar projectje naast de soms wat saaie examples in een boek ook.
oh

Modbreak:Zo. Klaaaaaaar. Wil je deze zinloze non-discussie vanaf hier kappen a.u.b.?

[ Voor 12% gewijzigd door RobIII op 04-10-2020 01:22 ]


Acties:
  • 0 Henk 'm!

  • Bartoz
  • Registratie: November 2000
  • Niet online
Je zou ook octoparse kunnen gebruiken. Dat is een visuele webscraper.

Acties:
  • 0 Henk 'm!

  • NetXtreme
  • Registratie: Mei 2003
  • Laatst online: 03-10 03:45
Ik ben begonnen met Scrapy. Ben wel software ontwikkelaar, maar had weinig ervaring met Python. Als de generator voor een leeg project gebruikt en de documentatie even door leest is het allemaal niet zo spannend.

Verder maak ik van de scrapy projecten docker containers en run ze op Azure container instances voor een paar cent.

Acties:
  • 0 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 19:53
Alles is afhankelijk hoe gecompliceerd die webpagina's zijn en wat je er vanaf wilt scrapen.
beautiful soup is een allround tool die geen enkel kennis van die websites heeft en dus erg veel overhead met zich meebrengt.

Als je bijvoorbeeld maar een paar velden nodig hebt is het veel simpeler iets dedicated te maken.
Bijvoorbeeld door gebruik te maken van regex.

Ga met je browser naar die website, bekijk de source en zoekt uit hoe je de datavelden uniek kunt identificeren.
Schrijf met die kennis een regex in Python en sla die data ergens op.

Zo simpel is het.

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • Kraay89
  • Registratie: September 2012
  • Laatst online: 17-09 11:55
Ben(V) schreef op donderdag 8 oktober 2020 @ 16:41:
...
Als je bijvoorbeeld maar een paar velden nodig hebt is het veel simpeler iets dedicated te maken.
Bijvoorbeeld door gebruik te maken van regex.

Ga met je browser naar die website, bekijk de source en zoekt uit hoe je de datavelden uniek kunt identificeren.
Schrijf met die kennis een regex in Python en sla die data ergens op.

Zo simpel is het.
HTML parsen met behulp van regex is echt een nono.

Er staan letterlijk tientallen en waarschijnlijk 100-en vergelijkbare vragen op bijvoorbeeld Stack Overflow en dit is altijd het meest geupvote answer. Regex is voor ongestructureerde text. Voor gestructureerde text (zoals een webpagina) gebruik je gewoon een nette parser, zoals BeautifulSoup of Scrapy.

Acties:
  • +2 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

Kraay89 schreef op vrijdag 9 oktober 2020 @ 09:53:
[...]


HTML parsen met behulp van regex is echt een nono.

Er staan letterlijk tientallen en waarschijnlijk 100-en vergelijkbare vragen op bijvoorbeeld Stack Overflow en dit is altijd het meest geupvote answer. Regex is voor ongestructureerde text. Voor gestructureerde text (zoals een webpagina) gebruik je gewoon een nette parser, zoals BeautifulSoup of Scrapy.
Het gaat hier niet om het interpreteren van de complete pagina. Het gaat hier gewoon om een stukje tekst vinden. Een parser is dan vaak overkill en een regexp in dat geval zeker niet automatisch een nono.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 19:53
Precies, als je weet wat je nodig hebt is een regex veel efficiënter.

En hoe denk je dat tools als beautiful soup het doen?
Precies, dat een grote bak met regexen, maar omdat zo'n tools universeel moet zijn krijg je vreselijk veel overhead.
Want het probleem is dat html juist een volkomen ongestructureerd pagina opmaak tool is.

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • leipe annie
  • Registratie: November 2011
  • Laatst online: 01-10 09:05
De informatie die ik van de pagina's wil halen zijn:
  • Productnaam
  • Specificaties
  • Prijs.
Maar soms is de prijs afhankelijk van variabele. Het is een beetje vergelijkbaar als wanneer je een product pagina van een laptop wil scrapen.

Laptop 4gb ram, 120gb hdd kost € 400
- variabelen
Ram +2gb = + € 30
Ram +4gb = + € 55
Hdd + 120gb = + €20
hdd + 380gb = + €45

dus het is denk ik iets meer dan een simpel stukje vast tekst ergens af halen. En daarbij is het ook gewoon een oefening om Python the leren.

[ Voor 0% gewijzigd door leipe annie op 09-10-2020 11:57 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 19:53
Lijkt me precies een prima toepassing om een Python script met een paar regexen te gebruiken.

Helaas heeft het leren van het gebruik van regexen nogal een steile leercurve, maar als je het eenmaal door hebt is het bijzonder krachtig.

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • NoUser
  • Registratie: Oktober 2001
  • Laatst online: 00:29

NoUser

For Real ?

Dit is wel een handige Regex site

Everything is Energy, Energy is Everything ^ it's nice to be important, but it's more important to be nice


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mja, om daar nou een half jaar oud topic voor te schoppen...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.