donker proxyscrape logo

Web scraping voor beginners: Basis en framework met Python

Python, Schrapen, 01-01-20215 min gelezen

Web scraping is de kunst van het extraheren van gegevens van een website in een geautomatiseerde en goed gestructureerde vorm. Er kunnen verschillende formaten zijn voor het schrapen van gegevens, zoals Excel, CSV en nog veel meer. Enkele praktische toepassingen van web scraping zijn marktonderzoek, prijsmonitoring, prijsinformatie, marktonderzoek en leadgeneratie. Web scraping is een instrumentele techniek om optimaal gebruik te maken van openbaar beschikbare gegevens en slimmere beslissingen te nemen. Het is dus goed voor iedereen om ten minste de basisprincipes van web scraping te kennen om er voordeel uit te halen.

Dit artikel behandelt de basisprincipes van web scraping door te spelen met het framework van Python genaamd Beautiful Soup. We gebruiken Google Colab als onze codeeromgeving.

Stappen in Web Scraping met Python

  1. Eerst en vooral moeten we de webpagina identificeren die we willen scrapen en een HTTP-verzoek sturen naar die URL. Als antwoord stuurt de server de HTML-inhoud van de webpagina terug. Voor deze taak zullen we een HTTP-bibliotheek van derden gebruiken om python-requests af te handelen.
  2. Zodra we met succes toegang hebben gekregen tot de HTML-inhoud, komt de belangrijkste taak bij het parsen van de gegevens. We kunnen gegevens niet eenvoudigweg verwerken door middel van stringverwerking, aangezien de meeste HTML-gegevens genest zijn. Daar komt de parser om de hoek kijken, die een geneste boomstructuur van de HTML-gegevens maakt. Een van de meest geavanceerde HTML-parserbibliotheken is html5lib.
  3. Daarna volgt de tree traversal, waarbij we door de parse tree navigeren en zoeken. Hiervoor gebruiken we Beautiful Soup (een python-bibliotheek van derden). Deze Python-bibliotheek wordt gebruikt om gegevens uit HTML- en XML-bestanden te halen.

Nu hebben we gezien hoe het proces van web scraping werkt. Laten we beginnen met coderen,

Stap 1: Bibliotheken van derden installeren

In de meeste gevallen wordt Colab geleverd met reeds geïnstalleerde pakketten van derden. Maar toch, als je import statements niet werken, kun je dit probleem oplossen door enkele pakketten te installeren met de volgende commando's, 

pip installeert verzoeken
pip html5lib installeren 
pip bs4 installeren
Stap2: De HTML-inhoud van de webpagina openen
verzoeken importeren 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.inhoud)

De uitvoer van het formulier wordt weergegeven,

Laten we proberen dit stukje code te begrijpen,

  1. In de eerste regel code importeren we de requests bibliotheek.
  2. Vervolgens geven we de URL op van de webpagina die we willen scrapen.
  3. In de derde regel code sturen we het HTTP-verzoek naar de opgegeven URL en slaan we het antwoord van de server op in een object genaamd r.
  4. Tenslotte geeft print(r.content) de ruwe HTML-inhoud van de webpagina weer.
Stap3: De HTML-inhoud parsen
verzoeken importeren 
van bs4 importeer BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # Als deze regel een fout veroorzaakt, voer dan 'pip install html5lib' uit of installeer html5lib 
print(soup.prettify())
Uitgang:

Het geeft een zeer lange uitvoer; enkele schermafbeeldingen zijn hieronder bijgevoegd.

Een van de beste dingen aan Beautiful Soup is dat het is gebouwd op de HTML-parsingbibliotheken zoals html5lib, html.parse, lxml enzovoort, waardoor het object van Beautiful Soap en de parserbibliotheek tegelijkertijd kunnen worden gemaakt. 

In de bovenstaande code hebben we het Beautiful Soup-object gemaakt door twee argumenten door te geven:

r.inhoud: Ruwe HTML-inhoud.
html5lib: Specificeert de HTML-parser die we willen gebruiken.

Tot slot wordt soup.prettify() afgedrukt, waardoor de parse tree een visuele weergave krijgt van de ruwe HTML-inhoud.

Stap4: Zoeken en navigeren door de parse tree

Nu is het tijd om enkele nuttige gegevens uit de HTML-inhoud te halen. De soepobjecten bevatten de gegevens in de vorm van een geneste structuur, die verder programmatisch kan worden geëxtraheerd. In ons geval schrapen we een webpagina die bestaat uit enkele citaten. Dus maken we een programma dat deze citaten oplost. De code wordt hieronder gegeven,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Voordat we verder gaan, is het aan te raden om de HTML-inhoud van de webpagina, die we hebben afgedrukt met de methode soup.prettify(), door te nemen en te proberen een patroon te vinden om naar de aanhalingstekens te navigeren.

Nu zal ik uitleggen hoe we dit in de bovenstaande code voor elkaar krijgen, 

Als we door de aanhalingstekens navigeren, zien we dat alle aanhalingstekens in een div-container staan met id 'all_quotes'. Dus vinden we dat div-element (in de code tabel genoemd) met de methode find():

table = soup.find('div', attrs = {'id':'all_quotes'})

Het eerste argument in deze functie is de HTML-tag die gezocht moet worden. Het tweede argument is een element van het type woordenboek om de extra attributen te specificeren die bij die tag horen. De methode find() retourneert het eerste overeenkomende element. Je kunt table.prettify() proberen om een beter gevoel te krijgen van wat dit stukje code doet.

Als we ons richten op het tabelelement, bevat de div-container elke quote waarvan de class quote is. Dus we lopen door elke div container waarvan de class quote is.

Hier is de methode findAll() erg handig, die qua argumenten lijkt op de methode find(), maar het grote verschil is dat deze methode een lijst met alle overeenkomende elementen retourneert. 

We itereren door elke offerte met behulp van een variabele genaamd rij.

Laten we een voorbeeld van de inhoud van een HTML-rij analyseren voor een beter begrip:

Beschouw nu het volgende stukje code:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
Hier maken we een woordenboek om alle informatie over een citaat in op te slaan. De puntnotatie wordt gebruikt om toegang te krijgen tot de geneste structuur. Om toegang te krijgen tot de tekst in het HTML-element gebruiken we .text:

Verder kunnen we ook attributen van tags toevoegen, verwijderen, wijzigen en openen. We hebben dit gedaan door de tag als een woordenboek te behandelen:

quote['url'] = row.a['href']
Vervolgens hebben we alle aanhalingstekens toegevoegd aan de lijst met de naam aanhalingstekens. 

Tot slot zullen we een CSV-bestand genereren, dat zal worden gebruikt om onze gegevens op te slaan.

bestandsnaam = 'inspirational_quotes.csv'.

We hebben ons bestand inspirational_qoutes.csv genoemd en alle citaten erin opgeslagen om ook in de toekomst te gebruiken. Hier is hoe ons inspirational_quotes.csv bestand eruit ziet,

In de bovenstaande uitvoer hebben we slechts drie rijen getoond, maar in werkelijkheid zijn er 33 rijen. Dit betekent dus dat we een aanzienlijke hoeveelheid gegevens van de webpagina hebben gehaald door gewoon een eenvoudige poging te doen. 

Opmerking: In sommige gevallen wordt web scraping als illegaal beschouwd, wat ertoe kan leiden dat je IP-adres permanent wordt geblokkeerd door de website. Je moet dus voorzichtig zijn en alleen websites en webpagina's scrapen die dit toestaan. 

Waarom Web Scraping gebruiken?

Enkele van de echte scenario's waarin web scraping van enorm nut kan zijn, zijn,

Leads genereren
Een van de belangrijkste verkoopactiviteiten voor de meeste bedrijven is het genereren van leads. Volgens een rapport van Hubspot was het genereren van verkeer en leads de nummer één prioriteit van 61% van de inbound marketeers. Web scraping kan hierbij een rol spelen door marketeers toegang te geven tot de gestructureerde lijsten met leads op het hele internet.
Marktonderzoek 

Het doen van het juiste marktonderzoek is het belangrijkste element van elk lopend bedrijf en daarom is er zeer nauwkeurige informatie nodig. Marktanalyse wordt gevoed door web scraping in grote volumes, van hoge kwaliteit en met veel inzicht. Deze gegevens kunnen een zeer nuttig hulpmiddel zijn voor het uitvoeren van business intelligence. De belangrijkste focus van het marktonderzoek ligt op de volgende zakelijke aspecten:

  • Het kan worden gebruikt om markttrends te analyseren.
  • Het kan ons helpen om de marktprijzen te voorspellen.
  • Hiermee kunnen toegangspunten worden geoptimaliseerd op basis van de behoeften van de klant.
  • Het kan erg nuttig zijn bij het volgen van de concurrenten.
Advertenties maken

Web scraping kan een zeer handige en vruchtbare techniek zijn voor het maken van lijsten op basis van het type bedrijf, bijvoorbeeld onroerend goed en e-commerce winkels. Een web scraping tool kan het bedrijf helpen om duizenden aanbiedingen van producten van concurrenten op hun winkel te bekijken en alle benodigde informatie te verzamelen, zoals prijzen, productdetails, varianten en beoordelingen. Dit kan in slechts een paar uur worden gedaan, wat verder kan helpen bij het maken van eigen listings, zodat men zich meer kan richten op de eisen van de klant.

Informatie vergelijken

Web scraping helpt verschillende bedrijven om informatie te verzamelen, te vergelijken en die gegevens op een zinvolle manier aan te bieden. Denk bijvoorbeeld aan prijsvergelijkingswebsites die beoordelingen, functies en alle essentiële details van verschillende andere websites halen. Deze gegevens kunnen worden verzameld en op maat gemaakt voor eenvoudige toegang. Zo kan een lijst worden gegenereerd van verschillende retailers wanneer de koper zoekt naar een bepaald product. Web scraping maakt het besluitvormingsproces dus een stuk eenvoudiger voor de consument door verschillende productanalyses te tonen op basis van de vraag van de consument.

Geaggregeerde informatie

Web scraping kan helpen om de informatie te verzamelen en in een georganiseerde vorm weer te geven aan de gebruiker. Laten we eens kijken naar nieuwsaggregators. Web scraping zal op de volgende manieren worden gebruikt,

  1. Met behulp van web scraping kan men de meest nauwkeurige en relevante artikelen verzamelen.
  2. Het kan helpen bij het verzamelen van links naar nuttige video's en artikelen.
  3. Bouw tijdlijnen op volgens het nieuws.
  4. Trends vastleggen volgens de lezers van het nieuws.

Dus in dit artikel hebben we een diepgaande analyse gemaakt van hoe web scraping werkt aan de hand van een praktische use case. We hebben ook een heel eenvoudige oefening gedaan om een eenvoudige webschraper in Python te maken. Nu kun je alle websites van je keuze scrapen. Verder hebben we ook enkele scenario's uit de praktijk gezien waarin web scraping een belangrijke rol kan spelen. We hopen dat je genoten hebt van het artikel en dat alles duidelijk, interessant en begrijpelijk was.  

Als je op zoek bent naar geweldige proxy services voor je web scraping projecten, vergeet dan niet te kijken bij ProxyScrape residentiële en premium proxies.