Web Scraping Using Python
Herkese merhaba,
Bu yazımızda Python kullanarak Web Scraping işlemlerini inceleyeceğiz. Web sitelerinden otomatik olarak veri çekme isteğimiz her geçen gün artarak devam etmektedir. Çoğu zaman web sitelerinden veri çekme ve bunları analizlerimizde kullanma ihtiyacı ile karşı karşıya oluruz. Buna bir örnek vermek gerekirse makalemizde de değineceğimiz üzere Gittigidiyor gibi bir e-ticaret sitesinde ihtiyacımız olan alanlarla ilgili satış bilgilerini çekip daha sonrasında bunların üzerinde çeşitli analizler yapabiliriz.
Web sitelerinden verileri çekmek için çeşitli yöntemler vardır. En iyi yöntem ise API'lerin kullanılmasıdır. Neredeyse bütün sosyal medya siteleri (Facebook, Twitter, Instagram gibi bunların dışında da büyük verileri barındıran Google gibi), sitelerine erişime izin vermek için API sağlar. Eğer istediğiniz verileri API ile çekebiliyorsanız, bu yöntem Web Scraping işlemine göre daha çok tercih edilir.
Maalesef her web sitesi API kolaylığı sağlamamaktadır. Bazı web siteleri API kolaylığı sağlıyor çünkü izin verdikleri dışında diğer bilgilerin web sitelerinden çekilmesini istemiyorlar. Bazıları ise teknik bilgi eksikliği nedeniyle API desteği sağlayamıyor. Peki API'lerin kullanılamadığı durumlarda ne yapmamız gerekiyor? Verileri çekebilmek için Web Scraping işlemini kullanmamız gerekiyor.
Web Scraping, web sitelerinden istenilen bilgileri ayıklayan bir yazılım tekniğidir. Bu teknik çoğunlukla web üzerindeki unstructured verilerin (HTML biçimi), structured verilere (veritabanı veya spreadsheet'lere) dönüştürülmesinde kullanılır. Web Scraping işlemi için bir çok programlama dili kullanılabilir. Python'ın kullanım kolaylığı ve sahip olduğu kütüphaneler dolayısıyla (BeautifulSoup gibi) Python'la Web Scraping işlemlerini yapacağız.
HTML Tags
Web Scraping işlemlerini kolay bir şekilde yapabilmek için HTML dilinin yapısına hakim olmamız gerekiyor. Bazı basic bilgilerden bahsetmek gerekirse:
# Extract the information to DataFrame
Bu örneğimizde http://www.gittigidiyor.com/ sitesindeki Günün Fırsatlarını Web Scraping yöntemiyle Data Frame listesi halinde göstereceğiz. Bunun için ilk önce çekmek istediğimiz bilgilerin hangi html tag'ı olduğu ve id, class gibi özelliklerini bilmemiz gerekiyor. Site üzerinde Günün Fırsatı bölümüne gelip herhangi bir fırsat bilgisi üzerinde sağ tıklarız ve "Inspect Element"i seçeriz:
Ürün bilgilerinin bulunduğu div'lerin class bilgisi alınarak bütün div tag'leri, bu tag'ler içerisindeki ürün bilgilerinin tutulduğu tag'ler çekilir. Python'ın pandas kütüphanesi kullanılarak liste halinde gösterilir:
all_divs = soup.find_all('div',{'class':'gg-d-24 gg-t-24 gg-m-24 daily-deal-container-desktop'})
# Generate lists
A=[]
B=[]
C=[]
D=[]
E=[]
F=[]
G=[]
for row in all_divs:
A.append(row.find("span",{"class":"product-title"}).text)
B.append(row.find("span",{"class":"product-description"}).text)
C.append(row.find("span",{"class":"product-new-price"}).text)
D.append(row.find("span",{"class":"product-old-price"}).text)
# import pandas to convert list to data frame
import pandas as pd
tablo = pd.DataFrame({
'Product Title':A,
'Product Desc':B,
'Product New':C,
'Product Old':D
})
print(tablo.head(5))
İyi okumalar
Bu yazımızda Python kullanarak Web Scraping işlemlerini inceleyeceğiz. Web sitelerinden otomatik olarak veri çekme isteğimiz her geçen gün artarak devam etmektedir. Çoğu zaman web sitelerinden veri çekme ve bunları analizlerimizde kullanma ihtiyacı ile karşı karşıya oluruz. Buna bir örnek vermek gerekirse makalemizde de değineceğimiz üzere Gittigidiyor gibi bir e-ticaret sitesinde ihtiyacımız olan alanlarla ilgili satış bilgilerini çekip daha sonrasında bunların üzerinde çeşitli analizler yapabiliriz.
Web sitelerinden verileri çekmek için çeşitli yöntemler vardır. En iyi yöntem ise API'lerin kullanılmasıdır. Neredeyse bütün sosyal medya siteleri (Facebook, Twitter, Instagram gibi bunların dışında da büyük verileri barındıran Google gibi), sitelerine erişime izin vermek için API sağlar. Eğer istediğiniz verileri API ile çekebiliyorsanız, bu yöntem Web Scraping işlemine göre daha çok tercih edilir.
Maalesef her web sitesi API kolaylığı sağlamamaktadır. Bazı web siteleri API kolaylığı sağlıyor çünkü izin verdikleri dışında diğer bilgilerin web sitelerinden çekilmesini istemiyorlar. Bazıları ise teknik bilgi eksikliği nedeniyle API desteği sağlayamıyor. Peki API'lerin kullanılamadığı durumlarda ne yapmamız gerekiyor? Verileri çekebilmek için Web Scraping işlemini kullanmamız gerekiyor.
Web Scraping Nedir?
HTML Tags
Web Scraping işlemlerini kolay bir şekilde yapabilmek için HTML dilinin yapısına hakim olmamız gerekiyor. Bazı basic bilgilerden bahsetmek gerekirse:
# Extract the information to DataFrame
Bu örneğimizde http://www.gittigidiyor.com/ sitesindeki Günün Fırsatlarını Web Scraping yöntemiyle Data Frame listesi halinde göstereceğiz. Bunun için ilk önce çekmek istediğimiz bilgilerin hangi html tag'ı olduğu ve id, class gibi özelliklerini bilmemiz gerekiyor. Site üzerinde Günün Fırsatı bölümüne gelip herhangi bir fırsat bilgisi üzerinde sağ tıklarız ve "Inspect Element"i seçeriz:
Ürün bilgilerinin bulunduğu div'lerin class bilgisi alınarak bütün div tag'leri, bu tag'ler içerisindeki ürün bilgilerinin tutulduğu tag'ler çekilir. Python'ın pandas kütüphanesi kullanılarak liste halinde gösterilir:
all_divs = soup.find_all('div',{'class':'gg-d-24 gg-t-24 gg-m-24 daily-deal-container-desktop'})
# Generate lists
A=[]
B=[]
C=[]
D=[]
E=[]
F=[]
G=[]
for row in all_divs:
A.append(row.find("span",{"class":"product-title"}).text)
B.append(row.find("span",{"class":"product-description"}).text)
C.append(row.find("span",{"class":"product-new-price"}).text)
D.append(row.find("span",{"class":"product-old-price"}).text)
# import pandas to convert list to data frame
import pandas as pd
tablo = pd.DataFrame({
'Product Title':A,
'Product Desc':B,
'Product New':C,
'Product Old':D
})
print(tablo.head(5))
İyi okumalar
Yorumlar
Yorum Gönder