dunkel proxyscrape logo

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

Python, Jan-03-20235 Min. gelesen

Nachrichten sind der beste Weg, um zu erfahren, was weltweit geschieht. Für Dateningenieure sind Nachrichtenartikel eine der besten Möglichkeiten, surreale Mengen an Daten zu sammeln. Mehr Daten bedeuten mehr Erkenntnisse, und das ist die einzige Möglichkeit, unsere Technologie zu erneuern und unsere Menschlichkeit auf ein höheres Niveau zu bringen als je zuvor. Aber es gibt viele Nachrichten, und es ist unmöglich, alle Daten manuell zu erfassen. Was ist der beste Weg, um die Daten automatisch zu erhalten? Die Antwort lautet: Web Scraping für Nachrichtenartikel mit Python.

In diesem Artikel werden wir einen Web Scraper erstellen, um die neuesten Nachrichtenartikel aus verschiedenen Zeitungen zu scrapen und als Text zu speichern. Wir werden die folgenden zwei Schritte durchgehen, um eine eingehende Analyse des gesamten Prozesses zu erhalten.

  1. Oberflächliche Einführung in Webseiten und HTML.
  2. Web Scraping mit Python und der berühmten Bibliothek BeautifulSoup.

Springen Sie einfach zu einem beliebigen Abschnitt, um mehr darüber zu erfahren, wie man mit Python Web Scraping für Nachrichtenartikel durchführt

Inhaltsübersicht

Oberflächliche Einführung in Webseiten und HTML

Wenn wir wichtige Informationen von einer Website abrufen wollen, ist es wichtig zu wissen, wie diese Website funktioniert. Wenn wir mit einem beliebigen Webbrowser (Chrome, Firefox, Mozilla usw.) eine bestimmte URL aufrufen, besteht diese Webseite aus einer Kombination von drei Technologien,

HTML (HyperText Markup Language): HTML definiert den Inhalt der Webseite. Es ist die Standardauszeichnungssprache für das Hinzufügen von Inhalten zur Website. Wenn Sie zum Beispiel Text, Bilder oder andere Dinge zu Ihrer Website hinzufügen möchten, hilft Ihnen HTML dabei.

CSS (Cascading Style Sheets): Wird für die Gestaltung von Webseiten verwendet. CSS steuert alle visuellen Designs, die Sie auf einer bestimmten Website sehen.

JavaScript: JavaScript ist das Gehirn einer Webseite. JavaScript übernimmt die gesamte logische Verarbeitung und die Funktionalität der Webseite. Daher ermöglicht es die Interaktivität von Inhalt und Stil.

Diese drei Programmiersprachen ermöglichen es uns, die Aspekte einer Webseite zu erstellen und zu manipulieren.

Ich nehme an, dass Sie die Grundlagen einer Webseite und von HTML für diesen Artikel kennen. Einige HTML-Konzepte wie divs, Tags, Überschriften usw. könnten bei der Erstellung dieses Web Scrapers sehr nützlich sein. Sie müssen nicht alles wissen, sondern nur die Grundlagen des Webseiten-Designs und wie die Informationen darin enthalten sind, und schon kann es losgehen.

Web Scraping von Nachrichtenartikeln mit BeautifulSoup in Python

Python verfügt über mehrere Pakete, mit denen wir Informationen aus einer Webseite auslesen können. Wir werden mit BeautifulSoup fortfahren, weil es eine der bekanntesten und einfach zu benutzenden Python-Bibliotheken für Web-Scraping ist.

BeautifulSoup eignet sich am besten für das Parsen des HTML-Inhalts einer URL und den Zugriff auf diesen mit Tags und Labels. Daher wird es bequem sein, bestimmte Textstücke aus der Website zu extrahieren.

Mit nur 3-5 Zeilen Code, können wir die Magie tun und extrahieren jede Art von Text unserer Website der Wahl aus dem Internet, die es ist eine einfach zu bedienende und dennoch leistungsstarke Paket erarbeitet.

Wir beginnen mit den Grundlagen. Um das Bibliothekspaket zu installieren, geben Sie den folgenden Befehl in Ihre Python-Distribution ein,

! pip install beautifulsoup4

Wir werden auch das Modul "requests" verwenden, da es BeautifulSoup mit dem HTML-Code einer beliebigen Seite versorgt. Um es zu installieren, geben Sie den folgenden Befehl in Ihre Python-Distribution ein,

! pip install Anfragen

Mit diesem Modul können wir den HTML-Code der Webseite abrufen und mit Hilfe des BeautfulSoup-Pakets durch sie navigieren. Die beiden Befehle, die uns die Arbeit sehr erleichtern werden, sind

find_all(element tag, attribut): Diese Funktion nimmt Tag und Attribute als Parameter und ermöglicht es uns, jedes HTML-Element einer Webseite zu finden. Sie identifiziert alle Elemente desselben Typs. Wir können stattdessen find() verwenden, um nur das erste Element zu finden.

get_text(): Sobald wir ein bestimmtes Element gefunden haben, können wir mit diesem Befehl den darin enthaltenen Text extrahieren.

Um im HTML-Code unserer Webseite zu navigieren und die Elemente zu finden, die wir auslesen wollen, können wir die Option "Element inspizieren" verwenden, indem wir mit der rechten Maustaste auf die Seite klicken oder einfach Strg+F drücken. Damit können Sie den Quellcode der Webseite sehen.

Sobald wir die Elemente von Interesse gefunden haben, erhalten wir den HTML-Code mit dem Anfragenmodul, und zum Extrahieren dieser Elemente verwenden wir BeautifulSoup.

Für diesen Artikel werden wir mit der englischen Zeitung EL Paris arbeiten. Wir werden die Titel der Nachrichtenartikel von der Titelseite und dann den Text scrapen.

Wenn wir uns den HTML-Code der Nachrichtenartikel ansehen, werden wir feststellen, dass der Artikel auf der Titelseite wie folgt aufgebaut ist,

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:

Anfragen importieren 
von bs4 importieren BeautifulSoup

Sobald wir den HTML-Inhalt mithilfe des Anfragemoduls erhalten haben, können wir ihn in der Deckblattvariablen speichern:

# Anfrage
r1 = requests.get(url)
r1.status_code
 
# Wir speichern in coverpage den Inhalt der Titelseite
deckblatt = r1.inhalt

Als nächstes definieren wir die Variable soup,

# Erstellung der Suppe
soup1 = BeautifulSoup(Deckblatt, 'html5lib')

In der folgenden Codezeile werden wir die gesuchten Elemente finden,

# Identifizierung der Nachrichten
deckblatt_nachrichten = soup1.find_all('h2', class_='articulo-titulo')

Mit final_all erhalten wir alle Vorkommen. Daher muss es eine Liste zurückgeben, in der jedes Element ein Nachrichtenartikel ist,

Um den Text zu extrahieren, verwenden wir den folgenden Befehl:

deckblatt_nachrichten[4].get_text()

Wenn wir auf den Wert eines Attributs (in unserem Fall der Link) zugreifen wollen, können wir den folgenden Befehl verwenden,

deckblatt_nachrichten[4]['href']

So können wir den Link im Klartext abrufen.

Wenn Sie alle Konzepte bis zu diesem Punkt verstanden haben, können Sie beliebige Inhalte im Web scrapen.

Der nächste Schritt besteht darin, mit dem href-Attribut auf die einzelnen Inhalte des Nachrichtenartikels zuzugreifen, den Quellcode zu erhalten, um die Absätze im HTML-Code zu finden, und sie schließlich mit BeautifulSoup zu erhalten. Es ist derselbe Prozess, den wir oben beschrieben haben, aber wir müssen die Tags und Attribute definieren, die den Inhalt des Nachrichtenartikels identifizieren.

Der Code für die volle Funktionalität ist unten angegeben. Ich werde nicht jede Zeile einzeln erklären, da der Code kommentiert ist; man kann ihn eindeutig verstehen, wenn man diese Kommentare liest.

Anzahl_der_Artikel = 5

# Leere Listen für Inhalt, Links und Titel
news_contents = []
list_links = []
list_titles = []
 
for n in np.arange(0, Anzahl_der_Artikel):
    
   # nur Nachrichtenartikel (es gibt auch Alben und andere Dinge)
   if "inenglish" not in deckblatt_nachrichten[n].find('a')['href']:  
       Weiter
    
   # Ermittelt den Link des Artikels
   link = deckblatt_nachrichten[n].find('a')['href']
    list_links.append(link)
    
   # Ermitteln des Titels
    title = deckblatt_nachrichten[n].find('a').get_text()
    list_titles.append(title)
    
   # Lesen des Inhalts (er ist in Absätze unterteilt)
    artikel = anfragen.get(link)
    article_content = article.content
    soup_article = BeautifulSoup(artikel_inhalt, 'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = body[0].find_all('p')
    
   # Vereinheitlichung der Absätze
    list_paragraphs = []
   for p in np.arange(0, len(x)):
        paragraph = x[p].get_text()
        list_paragraphs.append(absatz)
        final_article = " ".join(list_paragraphs)
        
    news_contents.append(letzter_Artikel)

Fügen wir die extrahierten Artikel wie folgt ein:

  • Ein Datensatz, in den die Modelle eingegeben werden (df_features).
  • Ein Datensatz mit dem Titel und dem 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

Um eine bessere Nutzererfahrung zu definieren, werden wir auch die Zeit messen, die ein Skript benötigt, um die Nachrichten zu erhalten. Dafür werden wir eine Funktion definieren und dann aufrufen. Auch hier werde ich nicht jede Zeile des Codes erklären, da der Code kommentiert ist. Um ein klares Verständnis zu bekommen, können Sie diese Kommentare lesen.

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)

Welches ist der beste Proxy für Web Scraping für Nachrichtenartikel mit Python?

ProxyScrape ist einer der beliebtesten und zuverlässigsten Proxy-Anbieter im Internet. Zu den drei Proxy-Diensten gehören dedizierte Proxy-Server für Rechenzentren, Proxy-Server für Privatanwender und Premium-Proxy-Server. Was ist also die bestmögliche Lösung für den besten HTTP-Proxy für Web-Scraping für Nachrichtenartikel mit Python? Vor der Beantwortung dieser Frage ist es am besten, sich die Eigenschaften der einzelnen Proxyserver anzusehen.

Ein dedizierter Rechenzentrums-Proxy eignet sich am besten für Hochgeschwindigkeits-Online-Aufgaben, wie z. B. das Streaming großer Datenmengen (in Bezug auf die Größe) von verschiedenen Servern zu Analysezwecken. Dies ist einer der Hauptgründe, warum Unternehmen dedizierte Proxys für die Übertragung großer Datenmengen in kurzer Zeit wählen.

Ein dedizierter Proxy für das Rechenzentrum verfügt über mehrere Funktionen, wie unbegrenzte Bandbreite und gleichzeitige Verbindungen, dedizierte HTTP-Proxys für eine einfache Kommunikation und IP-Authentifizierung für mehr Sicherheit. Mit einer Betriebszeit von 99,9 % können Sie sicher sein, dass das dedizierte Rechenzentrum während jeder Sitzung immer funktioniert. Nicht zuletzt bietet ProxyScrape einen ausgezeichneten Kundenservice und hilft Ihnen, Ihr Problem innerhalb von 24-48 Stunden zu lösen. 

Als nächstes folgt eine Proxy für Privatkunden. Residential ist ein Proxy für alle Verbraucher. Der Hauptgrund dafür ist, dass die IP-Adresse eines Residential-Proxys der vom ISP bereitgestellten IP-Adresse ähnelt. Das bedeutet, dass es einfacher als sonst ist, vom Zielserver die Erlaubnis für den Zugriff auf seine Daten zu erhalten. 

Die andere Funktion des Proxys für Privatanwender von ProxyScrapeist eine Rotationsfunktion. Ein rotierender Proxy hilft Ihnen, eine dauerhafte Sperrung Ihres Kontos zu vermeiden, da Ihr Wohn-Proxy Ihre IP-Adresse dynamisch ändert, was es dem Zielserver erschwert, zu überprüfen, ob Sie einen Proxy verwenden oder nicht. 

Abgesehen davon sind die anderen Merkmale eines Residential Proxy: unbegrenzte Bandbreite, zusammen mit gleichzeitiger Verbindung, dedizierte HTTP/s Proxys, Proxys zu jeder Zeit Sitzung wegen der 7 Millionen plus Proxys in der Proxy-Pool, Benutzername und Passwort-Authentifizierung für mehr Sicherheit, und nicht zuletzt die Fähigkeit, das Land Server zu ändern. Sie können den gewünschten Server auswählen, indem Sie den Ländercode an die Authentifizierung des Benutzernamens anhängen. 

Der letzte ist der Premium-Proxy. Premium-Proxys sind die gleichen wie dedizierte Rechenzentrums-Proxys. Die Funktionalität bleibt die gleiche. Der Hauptunterschied ist die Zugänglichkeit. Bei Premium-Proxys wird die Proxy-Liste (die Liste mit den Proxys) jedem Benutzer im Netz von ProxyScrapezur Verfügung gestellt. Aus diesem Grund kosten Premium-Proxys weniger als dedizierte Rechenzentrums-Proxys.

Was ist also die bestmögliche Lösung für den besten HTTP-Proxy für Web-Scraping für Nachrichtenartikel mit Python? Die Antwort lautet: "Wohn-Proxy." Der Grund dafür ist einfach. Wie bereits erwähnt, handelt es sich bei einem Residential Proxy um einen rotierenden Proxy, d.h. Ihre IP-Adresse wird über einen bestimmten Zeitraum dynamisch geändert, was hilfreich sein kann, um den Server auszutricksen, indem Sie viele Anfragen innerhalb eines kurzen Zeitraums senden, ohne eine IP-Sperre zu erhalten. 

Als Nächstes wäre es am besten, den Proxyserver auf der Grundlage des Landes zu ändern. Sie müssen nur den ISO_CODE des Landes am Ende der IP-Authentifizierung oder der Authentifizierung mit Benutzername und Passwort anhängen. 

Empfohlene Lektüre:

  1. Scrapen von YouTube-Kommentaren - 5 einfache Schritte
  2. Die 8 besten Python Web Scraping Tools im Jahr 2023

FAQs:

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?
Die Antwort lautet: Das hängt von den Bedingungen der Website ab. Die meisten Nachrichtenartikel können jedoch ausgelesen werden, da alle Informationen absichtlich der Öffentlichkeit zugänglich gemacht werden. Alle öffentlichen Daten können ausgelesen werden, solange Ihre Auslesemethode den Daten oder dem Eigentümer der Website nicht schadet.
3. How do I scrape Google News using Python?
Mit Hilfe der Python-Bibliothek "BeautifulSoup" können Sie Google News oder beliebige Nachrichtenartikel mit Python scrapen. Installieren Sie die Bibliothek und einen zuverlässigen Proxy, um eine IP-Blockierung des Zielservers zu verhindern.

Einpacken

In diesem Artikel haben wir die Grundlagen des Web Scraping kennengelernt, indem wir die Grundlagen des Designs und der Struktur von Webseiten verstanden haben. Wir haben auch praktische Erfahrungen mit der Extraktion von Daten aus Nachrichtenartikeln gemacht. Web Scraping kann Wunder bewirken, wenn es richtig gemacht wird. Zum Beispiel kann auf der Grundlage der extrahierten Daten ein vollständig optimiertes Modell erstellt werden, das Kategorien vorhersagen und dem Benutzer Zusammenfassungen anzeigen kann. Das Wichtigste ist, dass Sie Ihre Anforderungen herausfinden und die Struktur der Seite verstehen. Python verfügt über einige sehr leistungsfähige und dennoch einfach zu verwendende Bibliotheken für die Extraktion der Daten Ihrer Wahl. Das hat Web Scraping sehr einfach und unterhaltsam gemacht.  

Es ist wichtig zu beachten, dass dieser Code für die Extraktion von Daten aus dieser speziellen Webseite nützlich ist. Wenn wir dies von einer anderen Seite aus tun wollen, müssen wir unseren Code entsprechend der Struktur dieser Seite optimieren. Aber sobald wir wissen, wie wir sie identifizieren können, ist der Prozess genau derselbe.

In diesem Artikel soll der praktische Ansatz des Web Scraping für Nachrichtenartikel mit Python eingehend erläutert werden. Eine Sache, die man sich merken sollte, ist, dass ein Proxy eine absolute Notwendigkeit für Web Scraping ist. Er hilft dabei, IP-Sperren vom Zielserver zu verhindern. ProxyScrape bietet einen großartigen und zuverlässigen Wohn-Proxy für Ihr Web-Scraping für Nachrichtenartikel mit Python-Projekten.