Modern webschrapen met BeautifulSoup en Selenium

Overzicht

HTML is bijna intuïtief. CSS is een geweldige vooruitgang die de structuur van een pagina netjes van zijn uiterlijk en gevoel scheidt. JavaScript voegt wat pit toe. Dat is de theorie. De echte wereld is een beetje anders.

In deze zelfstudie leert u hoe de inhoud die u in de browser ziet, daadwerkelijk wordt weergegeven en hoe u deze kunt bijwerken wanneer dat nodig is. In het bijzonder leert u hoe u Disqus-opmerkingen kunt tellen. Onze hulpmiddelen zijn Python en geweldige pakketten zoals verzoeken, BeautifulSoup en Selenium.

Wanneer moet u webschrapen gebruiken??

Webscraping is de praktijk van het automatisch ophalen van de inhoud van webpagina's die zijn ontworpen voor interactie met menselijke gebruikers, het ontleden ervan en het extraheren van bepaalde informatie (eventueel het navigeren door koppelingen naar andere pagina's). Het is soms nodig als er geen andere manier is om de benodigde informatie te extraheren. In het ideale geval biedt de toepassing een speciale API voor het programmatisch toegang verkrijgen tot de gegevens. Er zijn verschillende redenen waarom webscraping je laatste redmiddel zou moeten zijn:

  • Het is fragiel (de webpagina's die u scrapt kunnen vaak veranderen).
  • Het kan verboden zijn (sommige web-apps hebben een beleid tegen scraping).
  • Het is misschien traag en expansief (als je veel lawaai moet halen en doorwaden).

Real-World webpagina's begrijpen

Laten we begrijpen waar we mee te maken hebben, door te kijken naar de uitvoer van een aantal veelgebruikte webtoepassingscode. In het artikel Inleiding tot Vagrant staan ​​onderaan de pagina enkele Disqus-opmerkingen:

Om deze opmerkingen te schrappen, moeten we ze eerst op de pagina vinden.

Bekijk paginabron

Elke browser sinds het begin van de tijd (de jaren 90) heeft de mogelijkheid om de HTML van de huidige pagina te bekijken ondersteund. Hier is een fragment uit de weergavebron van Introductie tot Vagrant die begint met een groot deel van geminificeerd en niet-geëgaliseerd JavaScript dat geen verband houdt met het artikel zelf. Hier is een klein gedeelte ervan:

Hier is wat echte HTML van de pagina:

Dit ziet er nogal rommelig uit, maar wat verrassend is, is dat je de Disqus-opmerkingen niet zult vinden in de bron van de pagina.

Het Mighty Inline Frame

Het is gebleken dat de pagina een mashup is en de Disqus-opmerkingen zijn ingesloten als een iframe (inline frame) element. U kunt dit achterhalen door met de rechtermuisknop op het gebied met opmerkingen te klikken en u zult zien dat er frame-informatie en bron daar is:

Dat is logisch. Het insluiten van inhoud van derden als een iframe is een van de belangrijkste redenen om iframes te gebruiken. Laten we het vinden