Inleiding
Momenteel doe ik met enkele collega's mee met de Profcoach competitie. Een leuke competitie, maar deze biedt helaas onvoldoende statistische informatie. Graag wil ik van de verschillende teams diverse informatie uitlezen.
Aangezien het een website is, leek het mij verstandig dit met een cloud oplossing zoals ScraperWiki aan te pakken aangezien je hier veel libraries hebt en mogelijkheden om met Python, Ruby of PHP een script te runnen.
Diverse problemen zijn inmiddels opgelost, zoals het faken van een browser met Mechanize om te kunnen inloggen. De data is helaas slechts toegankelijk als je ingelogd bent:
Het tussentijdse resultaat van de scraper staat hier:Probleem/Vraagstelling:
Momenteel zit ik helaas in een probleem waar ik geen oplossing voor heb. Middels een cssselect vraag ik alle divs uit die de class player hebben.
Hieronder een stukje code zoals deze bij bovengenoemde scraper is gedefinieerd:
Deze levert de volgende structuur op bij het commando: lxml.html.tostring(tds):
Daadwerkelijke vragen:
Momenteel doe ik met enkele collega's mee met de Profcoach competitie. Een leuke competitie, maar deze biedt helaas onvoldoende statistische informatie. Graag wil ik van de verschillende teams diverse informatie uitlezen.
Aangezien het een website is, leek het mij verstandig dit met een cloud oplossing zoals ScraperWiki aan te pakken aangezien je hier veel libraries hebt en mogelijkheden om met Python, Ruby of PHP een script te runnen.
Diverse problemen zijn inmiddels opgelost, zoals het faken van een browser met Mechanize om te kunnen inloggen. De data is helaas slechts toegankelijk als je ingelogd bent:
Het tussentijdse resultaat van de scraper staat hier:Probleem/Vraagstelling:
Momenteel zit ik helaas in een probleem waar ik geen oplossing voor heb. Middels een cssselect vraag ik alle divs uit die de class player hebben.
Hieronder een stukje code zoals deze bij bovengenoemde scraper is gedefinieerd:
Python:
1
2
3
4
5
6
7
8
9
| for el in root.cssselect("div.player"): tds = el #print lxml.html.tostring(tds) data = { 'player_name' : tds.cssselect("div.name"), 'player_points' : tds.cssselect("div.team"), 'player_position' : get_position (tds) } print data |
Deze levert de volgende structuur op bij het commando: lxml.html.tostring(tds):
HTML:
1
2
3
4
5
6
7
| <div class="player pos4" personid="b8f3e432-850b-48fa-9fc4-ad4ea9cdfda0" slot="0"> <div class="delete"></div> <div class="captain"></div> <div class="info"></div> <img src="http://cdn.eredivisielive.nl/images/teams/2/small/487825.jpg" width="34" height="50" alt=""><div class="name" title="Ryan Babel">Babel</div> <div class="team">+5</div> </div> |
Daadwerkelijke vragen:
- Hoe kan ik de title informatie uitlezen bij de div met class "name"?
Momenteel diverse pogingen gedaan met gebruikmakend van etree of .text_content(), echter levert dat geen resultaat op. Enerzijds klaagt de applicatie dat het niet mogelijk is bij strings en .text_content() kan niet bij objecten van het type list - Hoe kan ik de content van de class "team" opvragen?
- Hoe kan ik controleren of de class "captain" als CSS definitie display:block heeft meegekregen?
Had ik dit anders als moeten veiligstellen bij het opvragen van de pagina middels mechanize? Probleem is echter dat deze geen generated content oplevert.