ciemne logo proxyscrape

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

Python, styczeń-03-20235 minut czytania

Wiadomości to najlepszy sposób, aby dowiedzieć się, co dzieje się na świecie. Dla inżynierów danych, artykuły informacyjne są jednym ze świetnych sposobów na gromadzenie surrealistycznych ilości danych. Więcej danych oznacza więcej spostrzeżeń, a to jedyny sposób na wprowadzenie innowacji w naszej technologii i wyniesienie naszego człowieczeństwa na wyższy poziom niż kiedykolwiek wcześniej. Istnieje jednak wiele wiadomości, a ręczne zebranie wszystkich danych jest po ludzku niemożliwe. Jaki jest najlepszy sposób na automatyczne pozyskiwanie danych? Odpowiedzią jest skrobanie stron internetowych w poszukiwaniu artykułów z wiadomościami przy użyciu Pythona.

W tym artykule stworzymy skrobaczkę internetową do pobierania najnowszych artykułów z różnych gazet i przechowywania ich jako tekstu. Przejdziemy przez następujące dwa kroki, aby uzyskać dogłębną analizę całego procesu.

  1. Podstawowe wprowadzenie do stron internetowych i języka HTML.
  2. Skrobanie stron internetowych przy użyciu Pythona i słynnej biblioteki BeautifulSoup.

Możesz przejść do dowolnej sekcji, aby dowiedzieć się więcej o tym, jak skrobać strony internetowe w poszukiwaniu artykułów z wiadomościami za pomocą Pythona

Spis treści

Podstawowe wprowadzenie do stron internetowych i HTML

Jeśli chcemy wyciągnąć ważne informacje z jakiejkolwiek strony internetowej, ważne jest, aby wiedzieć, jak ona działa. Kiedy przechodzimy do określonego adresu URL za pomocą dowolnej przeglądarki internetowej (Chrome, Firefox, Mozilla itp.), Ta strona internetowa jest połączeniem trzech technologii,

HTML (HyperText Markup Language): HTML definiuje zawartość strony internetowej. Jest to standardowy język znaczników służący do dodawania treści do strony internetowej. Na przykład, jeśli chcesz dodać tekst, obrazy lub inne rzeczy do swojej witryny, HTML pomoże ci to zrobić.

CSS (kaskadowe arkusze stylów): Służy do stylizacji stron internetowych. CSS obsługuje wszystkie projekty wizualne widoczne na określonej stronie internetowej.

JavaScript: JavaScript jest mózgiem strony internetowej. JavaScript obsługuje całą logikę i funkcjonalność strony internetowej. Dlatego pozwala na interaktywność treści i stylu.

Te trzy języki programowania pozwalają nam tworzyć i manipulować aspektami strony internetowej.

Przypuszczam, że znasz podstawy strony internetowej i HTML dla tego artykułu. Niektóre koncepcje HTML, takie jak divy, tagi, nagłówki itp., mogą być bardzo przydatne podczas tworzenia tego skrobaka. Nie musisz wiedzieć wszystkiego, ale tylko podstawy projektowania stron internetowych i sposobu, w jaki informacje są w nich zawarte, i jesteśmy gotowi do pracy.

Skrobanie artykułów z sieci przy użyciu BeautifulSoup w Pythonie

Python posiada kilka pakietów, które pozwalają nam skrobać informacje ze stron internetowych. Będziemy kontynuować z BeautifulSoup, ponieważ jest to jedna z najbardziej znanych i łatwych w użyciu bibliotek Pythona do skrobania stron internetowych.

BeautifulSoup jest najlepszy do analizowania zawartości HTML adresu URL i uzyskiwania do niego dostępu za pomocą tagów i etykiet. Dlatego wyodrębnienie określonych fragmentów tekstu ze strony internetowej będzie wygodne.

Z zaledwie 3-5 linijkami kodu, możemy zrobić magię i wyodrębnić dowolny rodzaj tekstu naszej strony internetowej z Internetu, co sprawia, że jest to łatwy w użyciu, ale potężny pakiet.

Zaczynamy od samych podstaw. Aby zainstalować pakiet biblioteki, wpisz następujące polecenie w swojej dystrybucji Pythona,

pip install beautifulsoup4

Będziemy również używać modułu "requests", ponieważ dostarcza on BeautifulSoup kod HTML dowolnej strony. Aby go zainstalować, wpisz następujące polecenie w swojej dystrybucji Pythona,

pip install requests

Ten moduł żądań pozwoli nam pobrać kod HTML ze strony internetowej i nawigować po niej za pomocą pakietu BeautfulSoup. Dwa polecenia, które znacznie ułatwią nam pracę to

find_all(element tag, atrybut): Ta funkcja przyjmuje tag i atrybuty jako swoje parametry i pozwala nam zlokalizować dowolny element HTML ze strony internetowej. Zidentyfikuje ona wszystkie elementy tego samego typu. Zamiast tego możemy użyć funkcji find(), aby uzyskać tylko pierwszy z nich.

get_text(): Po zlokalizowaniu danego elementu, polecenie to pozwala nam wyodrębnić znajdujący się w nim tekst.

Aby nawigować po kodzie HTML naszej strony internetowej i zlokalizować elementy, które chcemy zeskrobać, możemy użyć opcji "inspect element", klikając prawym przyciskiem myszy na stronie lub po prostu naciskając Ctrl + F. Pozwoli to zobaczyć kod źródłowy strony internetowej.

Po zlokalizowaniu interesujących nas elementów, uzyskamy kod HTML za pomocą modułu żądań, a do wyodrębnienia tych elementów użyjemy BeautifulSoup.

W tym artykule wykorzystamy angielską gazetę EL Paris. Zeskrobujemy tytuły artykułów z pierwszej strony, a następnie tekst.

Jeśli sprawdzimy kod HTML artykułów informacyjnych, zobaczymy, że artykuł na stronie głównej ma następującą strukturę,

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:

import requests
from bs4 import BeautifulSoup

Po uzyskaniu zawartości HTML za pomocą modułu żądań, możemy zapisać ją w zmiennej coverpage:

# Request
r1 = requests.get(url)
r1.status_code
 
# Zapiszemy zawartość strony tytułowej w coverpage
coverpage = r1.content

Następnie zdefiniujemy zmienną soup,

# Tworzenie zupy
soup1 = BeautifulSoup(coverpage, 'html5lib')

W poniższym wierszu kodu zlokalizujemy elementy, których szukamy,

# Identyfikacja wiadomości
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

Używając final_all, otrzymujemy wszystkie wystąpienia. Dlatego musi zwrócić listę, w której każdy element jest artykułem informacyjnym,

Aby móc wyodrębnić tekst, użyjemy następującego polecenia:

coverpage_news[4].get_text()

Jeśli chcemy uzyskać dostęp do wartości atrybutu (w naszym przypadku linku), możemy użyć następującego polecenia,

coverpage_news[4]['href']

Pozwoli nam to uzyskać link w postaci zwykłego tekstu.

Jeśli pojąłeś wszystkie koncepcje do tego momentu, możesz skrobać dowolne treści według własnego uznania.

Następnym krokiem jest uzyskanie dostępu do treści każdego artykułu za pomocą atrybutu href, pobranie kodu źródłowego w celu znalezienia akapitów w kodzie HTML, a następnie pobranie ich za pomocą BeautifulSoup. Jest to ten sam proces, który opisaliśmy powyżej, ale musimy zdefiniować znaczniki i atrybuty, które identyfikują treść artykułu.

Poniżej znajduje się kod pełnej funkcjonalności. Nie będę wyjaśniał każdej linii osobno, ponieważ kod jest skomentowany; można go łatwo zrozumieć, czytając te komentarze.

number_of_articles = 5

# Puste listy dla treści, linków i tytułów
news_contents = []
list_links = []
list_titles = []
 
for n in np.arange(0, number_of_articles):
    
   # tylko artykuły z wiadomościami (są też albumy i inne rzeczy)
   if "inenglish" not in coverpage_news[n].find('a')['href']:  
       continue
    
   # Pobieranie linku do artykułu
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # Pobieranie tytułu
    title = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
   # Czytanie treści (jest ona podzielona na akapity)
    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')
    
   # Ujednolicenie akapitów
    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)

Umieśćmy wyodrębnione artykuły w następujący sposób:

  • Zbiór danych, który będzie wprowadzał modele (df_features).
  • Zestaw danych z tytułem i linkiem (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

Aby zdefiniować lepsze wrażenia użytkownika, zmierzymy również czas potrzebny skryptowi na uzyskanie wiadomości. Zdefiniujemy w tym celu funkcję, a następnie ją wywołamy. Ponownie, nie będę wyjaśniał każdej linii kodu, ponieważ kod jest komentowany. Aby uzyskać jasne zrozumienie, możesz przeczytać te komentarze.

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)

Jaki jest najlepszy serwer proxy do skrobania stron internetowych w poszukiwaniu artykułów z wiadomościami przy użyciu Pythona?

ProxyScrape jest jednym z najpopularniejszych i najbardziej niezawodnych dostawców proxy online. Trzy usługi proxy obejmują dedykowane serwery proxy centrów danych, domowe serwery proxy i serwery proxy premium. Jakie jest więc najlepsze możliwe rozwiązanie dla najlepszego serwera proxy HTTP do skrobania stron internetowych w celu uzyskania artykułów z wiadomościami przy użyciu Pythona? Zanim odpowiemy na to pytanie, najlepiej jest zapoznać się z funkcjami każdego serwera proxy.

Dedykowany serwer proxy centrum danych najlepiej nadaje się do szybkich zadań online, takich jak przesyłanie strumieniowe dużych ilości danych (pod względem rozmiaru) z różnych serwerów do celów analitycznych. Jest to jeden z głównych powodów, dla których organizacje wybierają dedykowane serwery proxy do przesyłania dużych ilości danych w krótkim czasie.

Dedykowany serwer proxy centrum danych ma kilka funkcji, takich jak nieograniczona przepustowość i jednoczesne połączenia, dedykowane serwery proxy HTTP ułatwiające komunikację oraz uwierzytelnianie IP dla większego bezpieczeństwa. Dzięki 99,9% uptime można mieć pewność, że dedykowane centrum danych będzie zawsze działać podczas każdej sesji. Wreszcie, ProxyScrape zapewnia doskonałą obsługę klienta i pomoże rozwiązać problem w ciągu 24-48 godzin roboczych. 

Następny jest mieszkaniowy serwer proxy. Residential to proxy dla każdego konsumenta. Głównym powodem jest to, że adres IP domowego serwera proxy przypomina adres IP dostarczony przez dostawcę usług internetowych. Oznacza to, że uzyskanie pozwolenia od serwera docelowego na dostęp do jego danych będzie łatwiejsze niż zwykle. 

Inną cechą domowego serwera proxy ProxyScrapejest funkcja rotacji. Rotacyjny serwer proxy pomaga uniknąć trwałego zablokowania konta, ponieważ domowy serwer proxy dynamicznie zmienia adres IP, utrudniając serwerowi docelowemu sprawdzenie, czy korzystasz z serwera proxy, czy nie. 

Oprócz tego, inne cechy proxy mieszkaniowego to: nieograniczona przepustowość, wraz z jednoczesnym połączeniem, dedykowane proxy HTTP/s, proxy w dowolnym momencie sesji ze względu na ponad 7 milionów proxy w puli proxy, uwierzytelnianie nazwy użytkownika i hasła dla większego bezpieczeństwa, a także, co nie mniej ważne, możliwość zmiany serwera krajowego. Możesz wybrać żądany serwer, dołączając kod kraju do uwierzytelniania nazwy użytkownika. 

Ostatni z nich to proxy premium. Premium proxy są takie same jak dedykowane proxy centrów danych. Funkcjonalność pozostaje taka sama. Główną różnicą jest dostępność. W przypadku proxy premium lista proxy (lista zawierająca proxy) jest udostępniana każdemu użytkownikowi w sieci ProxyScrape. Dlatego też proxy premium kosztują mniej niż dedykowane proxy centrów danych.

Jakie jest więc najlepsze możliwe rozwiązanie dla najlepszego proxy HTTP do skrobania stron internetowych w poszukiwaniu artykułów z wiadomościami przy użyciu Pythona? Odpowiedzią byłoby "mieszkaniowy serwer proxy." Powód jest prosty. Jak wspomniano powyżej, rezydencjalny serwer proxy jest obrotowym serwerem proxy, co oznacza, że adres IP użytkownika będzie dynamicznie zmieniany przez pewien okres czasu, co może być pomocne w oszukiwaniu serwera poprzez wysyłanie wielu żądań w krótkim czasie bez blokowania adresu IP. 

Następnie najlepiej byłoby zmienić serwer proxy na podstawie kraju. Wystarczy dodać kraj ISO_CODE na końcu uwierzytelniania IP lub uwierzytelniania nazwy użytkownika i hasła. 

Sugerowane lektury:

  1. Skrobanie komentarzy w YouTube - 5 prostych kroków
  2. 8 najlepszych narzędzi do skrobania stron internetowych w języku Python w 2023 roku

Najczęściej zadawane pytania:

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?
Odpowiedź brzmi: zależy to od warunków korzystania z danej witryny. Jednak większość artykułów informacyjnych może być skrobana, ponieważ wszystkie informacje są celowo udostępniane publicznie. Wszystkie dane publiczne mogą być skrobane, o ile metoda skrobania nie szkodzi danym lub właścicielowi witryny.
3. How do I scrape Google News using Python?
Możesz skrobać Google News lub dowolne artykuły informacyjne za pomocą Pythona z pomocą biblioteki Pythona o nazwie "BeautifulSoup". Zainstaluj bibliotekę i niezawodny serwer proxy, aby zapobiec blokowaniu IP z serwera docelowego.

Podsumowanie

W tym artykule zapoznaliśmy się z podstawami skrobania stron internetowych poprzez zrozumienie podstaw projektowania i struktury przepływu stron internetowych. Zdobyliśmy również praktyczne doświadczenie, wyodrębniając dane z artykułów informacyjnych. Web scraping może zdziałać cuda, jeśli zostanie wykonany prawidłowo. Na przykład, na podstawie wyodrębnionych danych można stworzyć w pełni zoptymalizowany model, który może przewidywać kategorie i wyświetlać podsumowania użytkownikowi. Najważniejszą rzeczą do zrobienia jest określenie swoich wymagań i zrozumienie struktury strony. Python ma kilka bardzo potężnych, ale łatwych w użyciu bibliotek do wyodrębniania wybranych danych. Dzięki temu web scraping stał się bardzo łatwy i przyjemny.  

Ważne jest, aby pamiętać, że ten kod jest przydatny do wyodrębniania danych z tej konkretnej strony internetowej. Jeśli chcemy to zrobić z dowolnej innej strony, musimy zoptymalizować nasz kod zgodnie ze strukturą tej strony. Ale gdy już wiemy, jak je zidentyfikować, proces jest dokładnie taki sam.

Niniejszy artykuł ma na celu dogłębne wyjaśnienie praktycznego podejścia do skrobania stron internetowych w poszukiwaniu artykułów z wiadomościami przy użyciu Pythona. Jedną rzeczą, o której należy pamiętać, jest to, że proxy jest absolutną koniecznością przy skrobaniu stron internetowych. Pomaga on zapobiegać blokadom IP z serwera docelowego. ProxyScrape zapewnia doskonałe i niezawodne rezydencjalne proxy do skrobania stron internetowych w poszukiwaniu artykułów z wiadomościami przy użyciu projektów Python.