donker proxyscrape logo

Web Scraping for News Articles using Python– Best Way In 2024

Python, Januari-03-20235 min gelezen
Nieuws is de beste manier om te weten te komen wat er wereldwijd gebeurt. Voor data-engineers zijn nieuwsartikelen een van de beste manieren om onwerkelijke hoeveelheden gegevens te verzamelen. Meer gegevens betekent meer inzichten, en dat is de enige manier om onze technologie te innoveren en onze mensheid tot grotere hoogten te brengen dan ooit tevoren. Maar er is veel nieuws en het is onmogelijk om alle gegevens handmatig te verzamelen. Wat is de beste manier om de gegevens automatisch te verzamelen? Het antwoord is web scraping voor nieuwsartikelen met behulp van python.

In dit artikel maken we een web scraper om de laatste nieuwsartikelen uit verschillende kranten te scrapen en op te slaan als tekst. We zullen de volgende twee stappen doorlopen voor een diepgaande analyse van hoe het hele proces in zijn werk gaat.

  1. Oppervlakkige inleiding tot webpagina's en HTML.
  2. Web scraping met behulp van Python en de beroemde bibliotheek BeautifulSoup.

Spring gerust naar een sectie voor meer informatie over het schrapen van nieuwsartikelen met behulp van python

Inhoudsopgave

Inleiding op oppervlakteniveau tot webpagina's en HTML

Als we belangrijke informatie van een website of webpagina willen halen, is het belangrijk om te weten hoe die website werkt. Wanneer we naar een specifieke URL gaan met een willekeurige webbrowser (Chrome, Firefox, Mozilla, enz.), is die webpagina een combinatie van drie technologieën,

HTML (HyperText Markup Language): HTML definieert de inhoud van de webpagina. Het is de standaard opmaaktaal voor het toevoegen van inhoud aan de website. Als je bijvoorbeeld tekst, afbeeldingen of andere dingen aan je website wilt toevoegen, helpt HTML je daarbij.
CSS (Cascading Style Sheets): Wordt gebruikt voor het stylen van webpagina's. CSS zorgt voor alle visuele ontwerpen die je op een bepaalde website ziet.
JavaScript: JavaScript is het brein van een webpagina. JavaScript verwerkt alle logica en functionaliteit van de webpagina. Het maakt het dus mogelijk om de inhoud en stijl interactief te maken.

Met deze drie programmeertalen kunnen we de aspecten van een webpagina maken en manipuleren.

Ik neem aan dat je de basisprincipes van een webpagina en HTML kent voor dit artikel. Sommige HTML-concepten zoals divs, tags, koppen, enz. kunnen erg handig zijn bij het maken van deze webscraper. Je hoeft niet alles te weten, maar alleen de basisprincipes van het ontwerp van een webpagina en hoe de informatie erin staat.

Nieuwsartikelen scrapen met behulp van BeautifulSoup in Python

Python heeft verschillende pakketten waarmee we informatie van een webpagina kunnen schrapen. We gaan verder met BeautifulSoup, omdat dit een van de bekendste en eenvoudig te gebruiken Python-bibliotheken voor web scraping is.

BeautifulSoup is het beste in staat om de HTML-inhoud van een URL te parseren en te benaderen met tags en labels. Daarom is het handig om bepaalde stukken tekst uit de website te halen.

Met slechts 3-5 regels code, kunnen we de magie doen en elk type tekst van onze website naar keuze van het internet halen, wat aangeeft dat het een eenvoudig te gebruiken maar krachtig pakket is.

We beginnen bij de basis. Om het bibliotheekpakket te installeren, typt u het volgende commando in uw Python-distributie,

pip installeren beautifulsoup4

We zullen ook de 'requests module' gebruiken, omdat deze BeautifulSoup voorziet van de HTML-code van elke pagina. Om deze te installeren, typt u het volgende commando in uw Python-distributie,

pip installatieverzoeken

Met deze requests-module kunnen we de HTML-code van de webpagina halen en er doorheen navigeren met behulp van het BeautfulSoup-pakket. De twee commando's die ons werk een stuk eenvoudiger maken zijn

find_all(element tag, attribuut): Deze functie neemt tag en attributen als parameters en stelt ons in staat om elk HTML-element van een webpagina te vinden. Het zal alle elementen van hetzelfde type identificeren. We kunnen in plaats daarvan find() gebruiken om alleen de eerste te krijgen.

get_text(): Zodra we een gegeven element hebben gelokaliseerd, kunnen we met dit commando de tekst binnenin extraheren.

Om door de HTML-code van onze webpagina te navigeren en de elementen te vinden die we willen scrapen, kunnen we de optie 'element inspecteren' gebruiken door met de rechtermuisknop op de pagina te klikken of gewoon op Ctrl+F te drukken. Hiermee kun je de broncode van de webpagina bekijken.

Zodra we de interessante elementen hebben gevonden, krijgen we de HTML-code met de requests-module en voor het extraheren van die elementen gebruiken we de BeautifulSoup.

Voor dit artikel gaan we aan de slag met de Engelse krant EL Paris. We scrapen de titels van nieuwsartikelen van de voorpagina en vervolgens de tekst.

Als we de HTML-code van de nieuwsartikelen inspecteren, zien we dat het artikel op de voorpagina een structuur als deze heeft,

The title has <h2> element with itemprop=”headline” and class=”articulo-titulo” attributes. It has an href attribute containing the text. So we will now extract the text using the following commands:

verzoeken importeren 
van bs4 importeer BeautifulSoup

Zodra we de HTML-inhoud krijgen met de requests-module, kunnen we deze opslaan in de coverpage-variabele:

# verzoek
r1 = requests.get(url)
r1.status_code
 
# We slaan de inhoud van de coverpagina op in coverpage
coverpage = r1.content

Vervolgens definiëren we de soepvariabele,

# Soep maken
soup1 = BeautifulSoup(coverpage, 'html5lib')

In de volgende regel code lokaliseren we de elementen die we zoeken,

# Nieuws identificatie
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

Met final_all krijgen we alle occurrences. Daarom moet het een lijst teruggeven waarin elk item een nieuwsartikel is,

Om de tekst te kunnen extraheren, gebruiken we het volgende commando:

coverpage_news[4].get_text()

Als we de waarde van een attribuut (in ons geval de link) willen opvragen, kunnen we het volgende commando gebruiken,

coverpage_news[4]['href']

Hiermee krijgen we de link in platte tekst.

Als je alle concepten tot nu toe hebt begrepen, kun je alle inhoud van je eigen keuze web scrapen.

De volgende stap bestaat uit het benaderen van de inhoud van elk nieuwsartikel met het href attribuut, het ophalen van de broncode om de paragrafen in de HTML-code te vinden en ze uiteindelijk op te halen met BeautifulSoup. Het is hetzelfde proces als we hierboven beschreven, maar we moeten de tags en attributen definiëren die de inhoud van het nieuwsartikel identificeren.

De code voor de volledige functionaliteit wordt hieronder gegeven. Ik zal niet elke regel apart uitleggen, omdat de code is becommentarieerd; je kunt het duidelijk begrijpen door de commentaren te lezen.

aantal_artikelen = 5
# Lege lijsten voor inhoud, links en titels
nieuws_inhoud = []
list_links = []
lijst_titels = []
 
voor n in np.arange(0, aantal_van_artikelen):
    
   # alleen nieuwsartikelen (er zijn ook albums en andere dingen)
   als "inenglish" niet in coverpage_news[n].find('a')['href']:  
       ga verder
    
   # De link van het artikel ophalen
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # De titel krijgen
    titel = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
   # De inhoud lezen (deze is verdeeld in paragrafen)
    artikel = aanvragen.get(link)
    artikel_inhoud = artikel.inhoud
    soep_artikel = BeautifulSoup(artikel_inhoud, 'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = body[0].find_all('p')
    
   # De paragrafen samenvoegen
    lijst_paragrafen = []
   voor p in np.arange(0, len(x)):
        alinea = x[p].get_text()
        lijst_paragrafen.toevoegen(alinea)
        laatste_artikel = " ".join(list_paragraphs)
        
    news_contents.append(final_article)

Laten we de geëxtraheerde artikelen in het volgende zetten:

  • Een dataset die de modellen (df_features) zal invoeren.
  • Een dataset met de titel en de link (df_show_info).
# df_features
df_features = pd.DataFrame(
     {'Article Content': news_contents 
    })
 
# df_show_info
df_show_info = pd.DataFrame(
    {'Article Title': list_titles,
     'Article Link': list_links})
df_features
df_show_info

Om een betere gebruikerservaring te definiëren, zullen we ook de tijd meten die een script nodig heeft om het nieuws te krijgen. Hiervoor definiëren we een functie die we vervolgens aanroepen. Nogmaals, ik zal niet elke regel code uitleggen, omdat de code is voorzien van commentaar. Voor een duidelijk begrip kun je het commentaar lezen.

def get_news_elpais():
    
    # url definition
    url = "https://elpais.com/elpais/inenglish.html"
    
    # Request
    r1 = requests.get(url)
    r1.status_code
 
    # We'll save in coverpage the cover page content
    coverpage = r1.content
 
    # Soup creation
    soup1 = BeautifulSoup(coverpage, 'html5lib')
 
    # News identification
    coverpage_news = soup1.find_all('h2', class_='articulo-titulo')
    len(coverpage_news)
    
    number_of_articles = 5
 
    # Empty lists for content, links and titles
    news_contents = []
    list_links = []
    list_titles = []
 
    for n in np.arange(0, number_of_articles):
 
        # only news articles (there are also albums and other things)
        if "inenglish" not in coverpage_news[n].find('a')['href']:  
            continue
 
        # Getting the link of the article
        link = coverpage_news[n].find('a')['href']
        list_links.append(link)
 
        # Getting the title
        title = coverpage_news[n].find('a').get_text()
        list_titles.append(title)
 
        # Reading the content (it is divided in paragraphs)
        article = requests.get(link)
        article_content = article.content
        soup_article = BeautifulSoup(article_content, 'html5lib')
        body = soup_article.find_all('div', class_='articulo-cuerpo')
        x = body[0].find_all('p')
 
        # Unifying the paragraphs
        list_paragraphs = []
        for p in np.arange(0, len(x)):
            paragraph = x[p].get_text()
            list_paragraphs.append(paragraph)
            final_article = " ".join(list_paragraphs)
 
        news_contents.append(final_article)
 
    # df_features
    df_features = pd.DataFrame(
         {'Content': news_contents 
        })
 
    # df_show_info
    df_show_info = pd.DataFrame(
        {'Article Title': list_titles,
         'Article Link': list_links,
         'Newspaper': 'El Pais English'})
    
    return (df_features, df_show_info)

Wat is de beste Proxy voor het scrapen van nieuwsartikelen met Python?

ProxyScrape is een van de populairste en betrouwbaarste proxy providers online. Drie proxy services omvatten dedicated datacenter proxy servers, residentiële proxy servers en premium proxy servers. Dus, wat is de best mogelijke oplossing voor de beste HTTP proxy voor web scraping voor nieuwsartikelen met behulp van python? Voordat je die vraag beantwoordt, kun je het beste eerst de functies van elke proxy server bekijken.
Een dedicated datacenter proxy is het meest geschikt voor snelle online taken, zoals het streamen van grote hoeveelheden gegevens (qua grootte) vanaf verschillende servers voor analysedoeleinden. Dit is een van de belangrijkste redenen waarom organisaties kiezen voor dedicated proxies voor het verzenden van grote hoeveelheden gegevens in korte tijd.

Een dedicated datacenter proxy heeft verschillende functies, zoals onbeperkte bandbreedte en gelijktijdige verbindingen, dedicated HTTP proxies voor eenvoudige communicatie en IP-authenticatie voor meer beveiliging. Met 99,9% uptime kunt u er zeker van zijn dat het dedicated datacenter altijd werkt tijdens elke sessie. Last but not least, ProxyScrape biedt een uitstekende klantenservice en zal je helpen om je probleem binnen 24-48 kantooruren op te lossen. 

De volgende is een residentiële proxy. residentiële is een go-to proxy voor elke algemene consument. De belangrijkste reden hiervoor is dat het IP-adres van een residentiële proxy lijkt op het IP-adres van de ISP. Dit betekent dat het verkrijgen van toestemming van de doelserver om toegang te krijgen tot zijn gegevens gemakkelijker zal zijn dan normaal. 

De andere functie van ProxyScrape's residentiële proxy is een roterende functie. Een roterende proxy helpt je een permanente ban op je account te voorkomen omdat je residentiële proxy dynamisch je IP-adres verandert, waardoor het voor de doelserver moeilijk is om te controleren of je een proxy gebruikt of niet. 

Afgezien daarvan zijn de andere kenmerken van een residentiële proxy : onbeperkte bandbreedte, samen met gelijktijdige verbinding, toegewijde HTTP/s proxies, proxies op elk moment sessie vanwege 7 miljoen plus proxies in de proxy pool, gebruikersnaam en wachtwoord authenticatie voor meer veiligheid, en last but not least, de mogelijkheid om de landserver te wijzigen. Je kunt de gewenste server selecteren door de landcode toe te voegen aan de gebruikersnaamauthenticatie. 

De laatste is de premium proxy. Premium proxies zijn hetzelfde als dedicated datacenter proxies. De functionaliteit blijft hetzelfde. Het belangrijkste verschil is de toegankelijkheid. In premium proxies wordt de lijst proxy (de lijst die proxies bevat) beschikbaar gemaakt voor elke gebruiker op ProxyScrape's netwerk. Daarom kost premium proxies minder dan dedicated datacenter proxies.
Dus, wat is de best mogelijke oplossing voor de beste HTTP proxy voor web scraping voor nieuwsartikelen met behulp van python? Het antwoord zou zijn "residentiële proxy." De reden is eenvoudig. Zoals hierboven gezegd, is de residentiële proxy een roterende proxy, wat betekent dat je IP-adres dynamisch zou veranderen over een periode van tijd, wat handig kan zijn om de server te misleiden door het verzenden van veel verzoeken binnen een klein tijdsbestek zonder het krijgen van een IP-blokkering. 

Vervolgens kun je het beste de proxy server wijzigen op basis van het land. Je hoeft alleen maar de ISO_CODE van het land toe te voegen aan het einde van de IP-authenticatie of de authenticatie met gebruikersnaam en wachtwoord. 

Aanbevolen lectuur:

FAQ's:

1. What is the best way to scrape news articles using python?
The python library is called “BeautifulSoup” and can automatically scrape data from any news article. The only requirement would be a basic knowledge of HTML for locating the HTML tag from the page source code that contains the data that needs to be scraped.
2. Is it okay to scrape news articles from the website?
Het antwoord is dat dit afhangt van de voorwaarden van de website. Maar de meeste nieuwsartikelen kunnen worden gescraped omdat alle informatie opzettelijk beschikbaar is gemaakt voor het publiek. Alle openbare gegevens kunnen worden gescraped zolang je scrapmethode de gegevens of de website-eigenaar niet schaadt.
3. How do I scrape Google News using Python?
Je kunt Google News of andere nieuwsartikelen scrapen met python met behulp van de pythonbibliotheek genaamd "BeautifulSoup". Installeer de bibliotheek en een betrouwbare residentiële proxy om IP-blokkering van de doelserver te voorkomen.

Inpakken

In dit artikel hebben we de basisprincipes van web scraping gezien door de basisprincipes van het ontwerp en de structuur van webpagina's te begrijpen. We hebben ook praktische ervaring opgedaan met het extraheren van gegevens uit nieuwsartikelen. Web scraping kan wonderen doen als het op de juiste manier wordt gedaan. Er kan bijvoorbeeld een volledig geoptimaliseerd model worden gemaakt op basis van geëxtraheerde gegevens dat categorieën kan voorspellen en samenvattingen kan tonen aan de gebruiker. Het belangrijkste is om je vereisten te achterhalen en de paginastructuur te begrijpen. Python heeft een aantal zeer krachtige en toch eenvoudig te gebruiken bibliotheken voor het extraheren van de gegevens van je keuze. Dat heeft web scraping heel eenvoudig en leuk gemaakt.  

Het is belangrijk op te merken dat deze code nuttig is voor het extraheren van gegevens van deze specifieke webpagina. Als we het van een andere pagina willen doen, moeten we onze code optimaliseren volgens de structuur van die pagina. Maar als we eenmaal weten hoe we ze moeten identificeren, is het proces precies hetzelfde.

Dit artikel hoopt de praktische aanpak van web scraping voor nieuwsartikelen met behulp van python grondig uit te leggen. Eén ding om te onthouden is dat proxy een absolute noodzaak is voor web scraping. Het helpt IP-blokkades van de doelserver te voorkomen. ProxyScrape biedt een geweldige en betrouwbare residentiële proxy voor uw web scraping voor nieuwsartikelen met behulp van python projecten.