karanlık proxyscrape logo

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

Python, Ocak-03-20235 dakika okuma
Haberler, dünya çapında neler olup bittiğini öğrenmenin en iyi yoludur. Veri mühendisleri için haber makaleleri, gerçeküstü miktarda veri toplamanın en iyi yollarından biridir. Daha fazla veri, daha fazla içgörü anlamına gelir ve bu da teknolojimizi yenilemek ve insanlığımızı her zamankinden daha yükseklere taşımak için tek yoldur. Ancak çok fazla haber var ve tüm verileri manuel olarak almak insani olarak imkansız. Verileri otomatik olarak almanın en iyi yolu nedir? Cevap, python kullanarak haber makaleleri için web kazıma.

Bu makalede, farklı gazetelerden en son haber makalelerini kazımak ve bunları metin olarak saklamak için bir web kazıyıcı oluşturacağız. Tüm sürecin nasıl yapıldığına dair derinlemesine bir analize sahip olmak için aşağıdaki iki adımdan geçeceğiz.

  1. Web sayfaları ve HTML'ye yüzeysel giriş.
  2. Python ve BeautifulSoup adlı ünlü kütüphaneyi kullanarak web kazıma.

Python kullanarak haber makaleleri için web kazıma işleminin nasıl yapılacağı hakkında daha fazla bilgi edinmek için herhangi bir bölüme atlamaktan çekinmeyin

İçindekiler

Web Sayfaları ve HTML'ye Yüzey Düzeyinde Giriş

Herhangi bir web sitesinden veya web sayfasından önemli bilgileri çekmek istiyorsak, o web sitesinin nasıl çalıştığını bilmek önemlidir. Herhangi bir web tarayıcısı (Chrome, Firefox, Mozilla, vb.) kullanarak belirli bir URL'ye gittiğimizde, o web sayfası üç teknolojinin birleşiminden oluşur,

HTML (HyperText Markup Language): HTML, web sayfasının içeriğini tanımlar. Web sitesine içerik eklemek için kullanılan standart işaretleme dilidir. Örneğin, web sitenize metin, resim veya başka herhangi bir şey eklemek istiyorsanız, HTML bunu yapmanıza yardımcı olur.
CSS (Basamaklı Stil Sayfaları): Web sayfalarını şekillendirmek için kullanılır. CSS, belirli bir web sitesinde gördüğünüz tüm görsel tasarımları yönetir.
JavaScript: JavaScript bir web sayfasının beynidir. JavaScript tüm mantık işlemlerini ve web sayfası işlevselliğini yönetir. Böylece içerik ve stilin etkileşimli hale getirilmesini sağlar.

Bu üç programlama dili, bir web sayfasının özelliklerini oluşturmamıza ve değiştirmemize olanak tanır.

Bu makale için bir web sayfasının ve HTML'nin temellerini bildiğinizi varsayıyorum. Divler, etiketler, başlıklar gibi bazı HTML kavramları bu web kazıyıcıyı oluştururken çok faydalı olabilir. Her şeyi bilmenize gerek yok, sadece web sayfası tasarımının temellerini ve bilgilerin nasıl içerildiğini bilmeniz yeterli.

Python'da BeautifulSoup Kullanarak Web Kazıma Haber Makaleleri

Python, bir web sayfasından bilgi kazımamıza izin veren çeşitli paketlere sahiptir. BeautifulSoup ile devam edeceğiz çünkü web kazıma için en ünlü ve kullanımı kolay Python kütüphanelerinden biridir.

BeautifulSoup, bir URL'nin HTML içeriğini ayrıştırmak ve ona etiketler ve etiketlerle erişmek için en iyisidir. Bu nedenle web sitesinden belirli metin parçalarını çıkarmak uygun olacaktır.

Sadece 3-5 satır kod ile sihir yapabilir ve internetten seçtiğimiz web sitesinin her türlü metnini çıkarabiliriz, bu da kullanımı kolay ancak güçlü bir paket olduğunu gösterir.

En temelden başlıyoruz. Kütüphane paketini kurmak için Python dağıtımınıza aşağıdaki komutu yazın,

! pip install beautifulsoup4

BeautifulSoup'a herhangi bir sayfanın HTML kodunu sağladığı için 'requests modülünü' de kullanacağız. Kurmak için Python dağıtımınıza aşağıdaki komutu yazın,

! pip yükleme istekleri

Bu istekler modülü, web sayfasından HTML kodunu almamızı ve BeautfulSoup paketini kullanarak gezinmemizi sağlayacaktır. İşimizi çok daha kolaylaştıracak iki komut şunlardır

find_all(element tag, attribute): Bu fonksiyon etiket ve nitelikleri parametre olarak alır ve bir web sayfasındaki herhangi bir HTML öğesini bulmamızı sağlar. Aynı tipteki tüm elemanları tanımlayacaktır. Bunun yerine sadece ilkini almak için find() fonksiyonunu kullanabiliriz.

get_text(): Belirli bir öğeyi bulduktan sonra, bu komut içerideki metni çıkarmamızı sağlar.

Web sayfamızın HTML kodunda gezinmek ve kazımak istediğimiz öğeleri bulmak için, sayfaya sağ tıklayarak veya sadece Ctrl+F tuşlarına basarak 'öğeyi incele' seçeneğini kullanabiliriz. Bu, web sayfasının kaynak kodunu görmenizi sağlayacaktır.

İlgilendiğimiz öğeleri bulduktan sonra, HTML kodunu requests modülü ile alacağız ve bu öğeleri ayıklamak için BeautifulSoup'u kullanacağız.

Bu makale için EL Paris İngilizce gazetesi ile çalışacağız. Ön sayfadan haber başlıklarını ve ardından metni kazıyacağız.

Haber makalelerinin HTML kodunu incelersek, ön sayfadaki makalenin aşağıdaki gibi bir yapıya sahip olduğunu görürüz,

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:

i̇thalat talepleri̇
from bs4 import BeautifulSoup

requests modülünü kullanarak HTML içeriğini aldıktan sonra, bunu coverpage değişkenine kaydedebiliriz:

# İstek
r1 = requests.get(url)
r1.status_code
 
# Kapak sayfası içeriğini kapak sayfasına kaydedeceğiz
kapak sayfası = r1.içerik

Daha sonra, çorba değişkenini tanımlayacağız,

# Çorba yaratma
soup1 = BeautifulSoup(coverpage, 'html5lib')

Aşağıdaki kod satırında, aradığımız öğeleri bulacağız,

# Haber tanımlama
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

final_all kullanarak, tüm oluşumları alıyoruz. Bu nedenle, her bir öğenin bir haber makalesi olduğu bir liste döndürmelidir,

Metni çıkarabilmek için aşağıdaki komutu kullanacağız:

coverpage_news[4].get_text()

Bir niteliğin (bizim durumumuzda bağlantı) değerine erişmek istiyorsak, aşağıdaki komutu kullanabiliriz,

coverpage_news[4]['href']

Bu, bağlantıyı düz metin olarak almamızı sağlayacaktır.

Bu noktaya kadar tüm kavramları kavradıysanız, kendi seçtiğiniz herhangi bir içeriği web kazıyabilirsiniz.

Bir sonraki adım, haber makalesinin her bir içeriğine href niteliği ile erişmeyi, HTML kodundaki paragrafları bulmak için kaynak kodunu almayı ve son olarak bunları BeautifulSoup ile almayı içerir. Bu yukarıda anlattığımız işlemle aynıdır, ancak haber makalesi içeriğini tanımlayan etiketleri ve nitelikleri tanımlamamız gerekir.

Tam işlevsellik için kod aşağıda verilmiştir. Kod yorumlandığı için her satırı ayrı ayrı açıklamayacağım; kişi bu yorumları okuyarak açıkça anlayabilir.

number_of_articles = 5
# İçerik, bağlantılar ve başlıklar için boş listeler
news_contents = []
list_links = []
list_titles = []
 
for n in np.arange(0, number_of_articles):
    
   # sadece haber makaleleri (albümler ve diğer şeyler de var)
   if "inenglish" not in coverpage_news[n].find('a')['href']:  
       devam et
    
   # Makalenin bağlantısını alma
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # Başlığı almak
    title = coverpage_news[n].find('a').get_text()
    list_titles.append(başlık)
    
   # İçeriği okuma (paragraflara bölünmüştür)
    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')
    
   # Paragrafların birleştirilmesi
    list_paragraflar = []
   for p in np.arange(0, len(x)):
        paragraf = x[p].get_text()
        liste_paragraflar.append(paragraf)
        final_article = " ".join(list_paragraphs)
        
    news_contents.append(final_article)

Çıkarılan makaleleri aşağıdakilere yerleştirelim:

  • Modelleri (df_features) girecek bir veri kümesi.
  • Başlık ve bağlantı içeren bir veri kümesi (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

Daha iyi bir kullanıcı deneyimi tanımlamak için, bir betiğin haberleri almak için harcadığı süreyi de ölçeceğiz. Bunun için bir fonksiyon tanımlayacağız ve sonra çağıracağız. Yine, kod yorumlandığı için her kod satırını açıklamayacağım. Net bir anlayış elde etmek için bu yorumları okuyabilirsiniz.

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)

Python Kullanarak Haber Makaleleri için Web Kazıma için En İyi Proxy Hangisidir?

ProxyScrape çevrimiçi en popüler ve güvenilir proxy sağlayıcılarından biridir. Üç proxy hizmeti arasında özel veri merkezi proxy sunucuları, konut proxy sunucuları ve premium proxy sunucuları bulunur. Peki, python kullanarak haber makaleleri için web kazıma için en iyi HTTP proxy için mümkün olan en iyi çözüm nedir? Bu soruyu yanıtlamadan önce, her bir proxy sunucusunun özelliklerini görmek en iyisidir.
Özel bir veri merkezi proxy'si analiz amacıyla çeşitli sunuculardan büyük miktarda veri (boyut açısından) akışı gibi yüksek hızlı çevrimiçi görevler için en uygunudur. Bu, kuruluşların kısa sürede büyük miktarda veri iletmek için özel proxy'leri seçmelerinin ana nedenlerinden biridir.

Özel bir veri merkezi proxy'si, sınırsız bant genişliği ve eşzamanlı bağlantılar, kolay iletişim için özel HTTP proxy'leri ve daha fazla güvenlik için IP kimlik doğrulaması gibi çeşitli özelliklere sahiptir. 99,9 çalışma süresi ile, özel veri merkezinin herhangi bir oturum sırasında her zaman çalışacağından emin olabilirsiniz. Son olarak, ProxyScrape mükemmel müşteri hizmetleri sunar ve sorununuzu 24-48 iş saati içinde çözmenize yardımcı olur. 

Sırada bir konut proxy'si. Konut, her genel tüketici için gidilecek bir proxy'dir. Bunun ana nedeni, bir konut proxy'sinin IP adresinin ISP tarafından sağlanan IP adresine benzemesidir. Bu, hedef sunucudan verilerine erişmek için izin almanın normalden daha kolay olacağı anlamına gelir. 

ProxyScrape'un konut proxy'sinin diğer bir özelliği de dönen bir özelliktir. Dönen proxy, hesabınızın kalıcı olarak yasaklanmasını önlemenize yardımcı olur çünkü konut proxy'niz IP adresinizi dinamik olarak değiştirerek hedef sunucunun proxy kullanıp kullanmadığınızı kontrol etmesini zorlaştırır. 

Bunun dışında, bir konut proxy'sinin diğer özellikleri şunlardır: eşzamanlı bağlantıyla birlikte sınırsız bant genişliği, özel HTTP / s proxy'leri, proxy havuzundaki 7 milyondan fazla proxy nedeniyle herhangi bir zaman oturumunda proxy'ler, daha fazla güvenlik için kullanıcı adı ve şifre kimlik doğrulaması ve son olarak, ülke sunucusunu değiştirme yeteneği. Ülke kodunu kullanıcı adı kimlik doğrulamasına ekleyerek istediğiniz sunucuyu seçebilirsiniz. 

Sonuncusu ise premium proxy. Premium proxy'ler özel veri merkezi proxy'leri ile aynıdır. İşlevsellik aynı kalır. Temel fark erişilebilirliktir. Premium proxy'lerde, proxy listesi (proxy'leri içeren liste) ProxyScrapeağındaki her kullanıcı için kullanılabilir hale getirilir. Bu nedenle premium proxy'ler özel veri merkezi proxy'lerinden daha ucuzdur.
Peki, python kullanarak haber makaleleri için web kazıma için en iyi HTTP proxy için mümkün olan en iyi çözüm nedir? Cevap "konut vekili." Nedeni basittir. Yukarıda belirtildiği gibi, konut proxy'si dönen bir proxy'dir, yani IP adresiniz belirli bir süre boyunca dinamik olarak değiştirilir ve bu da IP bloğu almadan küçük bir zaman dilimi içinde çok sayıda istek göndererek sunucuyu kandırmaya yardımcı olabilir. 

Daha sonra, en iyi şey proxy sunucusunu ülkeye göre değiştirmek olacaktır. IP kimlik doğrulamasının veya kullanıcı adı ve parola kimlik doğrulamasının sonuna ülke ISO_CODE'unu eklemeniz yeterlidir. 

Önerilen Okumalar:

SSS:

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?
Cevap, web sitesinin hüküm ve koşullarına bağlı olduğudur. Ancak haber makalelerinin çoğu, tüm bilgiler kasıtlı olarak kamuya açık hale getirildiği için kazınabilir. Kazıma yönteminiz verilere veya web sitesi sahibine zarar vermediği sürece tüm kamuya açık veriler kazınabilir.
3. How do I scrape Google News using Python?
"BeautifulSoup" adlı python kütüphanesi yardımıyla Google News veya herhangi bir haber makalesini python kullanarak kazıyabilirsiniz. Hedef sunucudan IP engellemesini önlemek için kütüphaneyi ve güvenilir bir yerleşim proxy'sini yükleyin.

Toparlıyoruz

Bu makalede, web sayfası akış tasarımı ve yapısının temellerini anlayarak web kazımanın temellerini gördük. Ayrıca haber makalelerinden veri çekerek uygulamalı deneyim yaptık. Web kazıma, doğru şekilde yapılırsa harikalar yaratabilir. Örneğin, çıkarılan verilere dayanarak kategorileri tahmin edebilen ve kullanıcıya özetler gösterebilen tamamen optimize edilmiş bir model oluşturulabilir. Yapılması gereken en önemli şey, gereksinimlerinizi belirlemek ve sayfa yapısını anlamaktır. Python, seçtiğiniz verileri ayıklamak için çok güçlü ancak kullanımı kolay bazı kütüphanelere sahiptir. Bu, web kazımayı çok kolay ve eğlenceli hale getirdi.  

Bu kodun söz konusu web sayfasından veri çekmek için kullanışlı olduğuna dikkat etmek önemlidir. Bunu başka bir sayfadan yapmak istiyorsak, kodumuzu o sayfanın yapısına göre optimize etmemiz gerekir. Ancak bunları nasıl tanımlayacağımızı öğrendikten sonra, süreç tamamen aynıdır.

Bu makale, python kullanarak haber makaleleri için web kazıma pratik yaklaşımını derinlemesine açıklamayı umuyor. Unutulmaması gereken bir şey, proxy'nin web kazıma için mutlak bir gereklilik olduğudur. Hedef sunucudan herhangi bir IP engellemesini önlemeye yardımcı olur. ProxyScrape python projelerini kullanarak haber makaleleri için web kazıma işleminiz için harika ve güvenilir bir yerleşim pro xy'si sağlar.