Web kazıma, veri toplamak ve bunun üzerine özel veri kümeleri oluşturmak için en iyi veri toplama yöntemlerinden biridir.

Veriye dayalı karar vermenin bu çağında yüksek kaliteli veri kümelerine sahip olmak çok önemlidir. Herkese açık çok sayıda veri kümesi olsa da, bazen özel ihtiyaçlarınızı karşılayan özel veri kümeleri oluşturmanız gerekebilir. Web kazıma, web sitelerinden veri çıkarmanıza olanak tanır. Daha sonra bu verileri özel veri kümenizi oluşturmak için kullanabilirsiniz.

Veri Toplama Yöntemlerine Genel Bakış

Farklı veri toplama yöntemleri vardır. Manuel veri girişi, API'ler, genel veri kümeleri ve web kazıma içerir. Her yöntemin avantajları ve sınırlamaları vardır.

Manuel veri girişi, özellikle büyük ölçekli veri toplama söz konusu olduğunda zaman alıcıdır ve insan hatalarına açıktır. Ancak, küçük ölçekli veri toplama için ve başka yollarla veri bulunmadığında faydalıdır.

API'ler, geliştiricilerin verilere yapılandırılmış bir şekilde erişmesine ve almasına olanak tanır. Genellikle gerçek zamanlı veya düzenli olarak güncellenen bilgiler sağlarlar. Ancak, API erişimi sınırlı olabilir, kimlik doğrulama gerektirebilir veya kullanım kısıtlamaları olabilir.

instagram viewer

Genel veri kümeleri çok çeşitli konuları ve alanları kapsar. Önceden toplanırlar ve genellikle yapılandırılmış bir formatta gelirler, bu da onları kolayca erişilebilir kılar. Gerekli veriler mevcut veri kümeleriyle uyumlu olduğunda zamandan ve emekten tasarruf edebilirler. Ancak, her zaman özel ihtiyaçlarınızı karşılamayabilir veya güncel olmayabilirler.

Web kazıma, API'ler sunmayan veya sınırlı erişime sahip web sitelerinden veri toplamanın bir yolunu sağlar. Özelleştirme, ölçeklenebilirlik ve birden çok kaynaktan veri toplama olanağı sağlar. Ancak, programlama becerileri, HTML yapısı bilgisi ve yasal ve etik yönergelere bağlılık gerektirir.

Veri Toplama için Web Scraping'i Seçme

Web kazıma, çok çeşitli veri kaynaklarına erişmenizi sağlayarak bilgileri doğrudan web sayfalarından çıkarmanıza olanak tanır. Ayrıca, hangi verilerin ayıklanacağı ve nasıl yapılandırılacağı üzerinde kontrol sahibi olmanızı sağlar. Bu, özel gereksinimlerinizi karşılamak ve projeniz için ihtiyaç duyduğunuz kesin bilgileri elde etmek için kazıma sürecini uyarlamayı kolaylaştırır.

Veri Kaynağını Belirleme

Web kazımanın ilk adımı, veri kaynağını belirlemektir. Bu, kazımak istediğiniz verileri içeren web sitesidir. Veri kaynağını seçerken, kaynağın hizmet şartlarına uyduğunuzdan emin olun. Bu makale, veri kaynağı olarak IMDb'yi (İnternet Film Veritabanı) kullanacaktır.

Ortamınızı Kurma

Sanal ortam kurun. Ardından, gerekli kitaplıkları yüklemek için aşağıdaki komutu çalıştırın.

pip yüklemesi güzelsoup4 pandalar ister

kullanacaksın istekler HTTP istekleri yapmak için kütüphane. güzel çorba4 HTML içeriğini ayrıştırmak ve web sayfalarından veri çıkarmak için. Son olarak, kullanacaksınız pandalar verileri işlemek ve analiz etmek.

Tam kaynak kodu bir GitHub deposu.

Web Scraping Komut Dosyasını Yazma

Sağladıkları işlevleri kullanabilmek için kurulu kitaplıkları betiğinize aktarın.

içe aktarmak istekler
itibaren bs4 içe aktarmak güzel çorba
içe aktarmak zaman
içe aktarmak pandalar gibi pd
içe aktarmak tekrar

bu zaman Ve tekrar modüller, Python standart kitaplığının bir parçasıdır. Bu nedenle, ayrı kurulumlar gerektirmez.

zaman sırasında kazıma işlemine gecikmeler ekleyecektir. tekrar ile ilgilenecek düzenli ifadeler.

Olacaksın hedef web sitesini kazımak için Güzel Çorba kullanın.

Hedef URL'nize bir HTTP GET isteği gönderecek bir işlev oluşturun. Daha sonra yanıtın içeriğini almalı ve bir güzel çorba HTML içeriğinden nesne.

kesinget_soup(url, parametreler=Yok, başlıklar=Yok):
yanıt = request.get (url, parametreler=paramlar, başlıklar=başlıklar)
çorba = GüzelÇorba (response.content, "html. ayrıştırıcı")
geri dönmek çorba

Bir sonraki adım, bilgiden bilgi çıkarmaktır. güzel çorba nesne.

Bilgileri ayıklamak için hedef web sitesi yapınızı anlamanız gerekir. Bu, web sitesinin HTML kodunu incelemeyi içerir. Bu, ayıklamak istediğiniz verileri içeren öğeleri ve nitelikleri tanımlamanıza yardımcı olacaktır. Hedef web sitenizi incelemek için bağlantısını bir web tarayıcısında açın ve kazımak istediğiniz verileri içeren web sayfasına gidin.

Ardından web sayfasına sağ tıklayın ve seçin İncelemek bağlam menüsünden. Bu, tarayıcının geliştirici araçlarını açacaktır.

Web sayfasının HTML kodunda, kazımak istediğiniz verileri içeren öğeleri arayın. İhtiyacınız olan verilerle ilişkili HTML etiketlerine, sınıflara ve niteliklere dikkat edin. Bunları, BeautifulSoup kullanarak verileri ayıklamak üzere seçiciler oluşturmak için kullanacaksınız. Yukarıdaki ekran görüntüsünde, filmin başlığının içinde olduğunu görebilirsiniz. lister-öğe-başlığı sınıf. Ayıklamak istediğiniz her özelliği inceleyin.

Bilgileri ayıklayacak bir işlev oluşturun. güzel çorba nesne. Bu durumda işlev, uygun HTML etiketlerini ve sınıf niteliklerini kullanarak filmin başlığını, derecelendirmesini, açıklamasını, türünü, çıkış tarihini, yönetmenlerini ve yıldızlarını bulur.

kesinözü_film_verileri(film):
başlık = film.find("h3", sınıf_="liste-öğe-başlığı").bulmak("A").metin
derecelendirme = film.find("div", sınıf_="reytingler-imdb-reytingi").güçlü.metin
açıklama = film.find("div", sınıf_="liste-öğe-içeriği").hepsini bul("P")[1].metin.şerit()
tür_element = film.find("açıklık", sınıf_="tür")
tür = tür_element.text.strip() eğer tür_öğesi başkaHiçbiri
yayın_tarihi = film.find("açıklık", sınıf_="liste-öğe-yıl metni sessize alındı ​​kalın").metin.şerit()
yönetmen_yıldızları = film.find("P", sınıf_="metin sessize alındı").hepsini bul("A")
yöneticiler = [person.text için kişi içinde yönetmen_yıldızları[:-1]]
yıldızlar = [kişi.metin için kişi içinde yönetmen_yıldızları[-1:]]
film_verileri = {
"Başlık": başlık,
"Değerlendirme": değerlendirme,
"Tanım": Tanım,
"Tür": tür,
"Yayın tarihi": yayın tarihi,
"Yönetmenler": yönetmenler,
"Yıldızlar": yıldızlar
}
geri dönmek film_verileri

Son olarak, yukarıdaki iki işlevi kullanarak gerçek kazımayı yapacak bir işlev oluşturun. Kazmak istediğiniz yılı ve maksimum film sayısını alacaktır.

kesinscrape_imdb_movies(yıl, sınır):
temel_url = " https://www.imdb.com/search/title"
başlıklar = {"Dil Kabul Et": "en-US, tr; q=0,9"}
filmler = []
başla = 1
sırasında len (filmler) < sınır:
parametreler = {
"yayın tarihi": yıl,
"düzenlemek": "num_votes, azal",
"başlangıç": başlangıç
}
çorba = get_soup (base_url, parametreler=paramlar, başlıklar=başlıklar)
film_listesi = çorba.find_all("div", sınıf_="liste öğesi modu-gelişmiş")
eğer len (film_listesi) == 0:
kırmak
için film içinde film_listesi:
film_verileri = özüt_film_verileri (film)
filmler.append (film_verileri)
eğer len (filmler) >= limit:
kırmak
+= başla 50# IMDb, sayfa başına 50 film görüntüler
Uyku zamanı(1) # Sunucunun aşırı yüklenmesini önlemek için bir gecikme ekleyin
geri dönmek filmler

O zaman ara def scrape_imdb_movies kazıma yapmak için.

# 2023'te yayınlanan 1000 filmi kazıyın (veya mevcut olduğu kadar çok)
filmler = scrape_imdb_movies(2023, 1000)

Artık verileri kazıdınız.

Bir sonraki adım, bu verilerden bir veri kümesi oluşturmaktır.

Kazınmış Verilerden Veri Kümesi Oluşturma

Pandaları kullanarak bir DataFrame oluşturun kazınmış verilerden.

df = sayfa. DataFrame (filmler)

Ardından, veri ön işleme ve temizleme işlemlerini yapın. Bu durumda, eksik değerlere sahip satırları kaldırın. Ardından, çıkış tarihinden yılı çıkarın ve sayısala dönüştürün. Gereksiz sütunları kaldırın. Dönüştür Değerlendirme sütundan sayısala. Son olarak, alfabetik olmayan karakterleri Başlık kolon.

df = df.dropna()
df['Çıkış tarihi'] = df['Yayın tarihi'].str.extract(r'(\d{4})')
df['Çıkış tarihi'] = pd.to_numeric (df['Çıkış tarihi'],
hatalar="zorlamak").astype("Int64")
df = df.drop(['Yayın tarihi'], eksen=1)
df['Değerlendirme'] = pd.to_numeric (df['Değerlendirme'], hatalar="zorlamak")
df['Başlık'] = df['Başlık'].uygula(lambda x: re.sub(r'\W+', ' ', X))

Verileri daha sonra projenizde kullanmak üzere bir dosyada saklayın.

df.to_csv("imdb_movies_dataset.csv", dizin=YANLIŞ)

Son olarak, nasıl göründüğünü görmek için veri kümenizin ilk beş satırını yazdırın.

df.head()

Çıktı, aşağıdaki ekran görüntüsünde gösterildiği gibidir:

Artık web kazıma yoluyla elde edilen bir veri kümeniz var.

Diğer Python Kitaplıklarını Kullanarak Web Scraping

Güzel Çorba, web kazıma için kullanabileceğiniz tek Python kitaplığı değildir. Orada başka kütüphaneler de var. Her birinin kendi avantajları ve sınırlamaları vardır. Kullanım durumunuza en uygun olanı bulmak için bunları araştırın.