İçeriğe geç

Python BeautifulSoup Kullanımı

BeautifulSoup  web sitesi üzerinde bulunan verilerin HTML tagları ve bu tagların seçicilerine göre ayırt edilerek verilerin çekilmesine yarayan bir kütüphanedir.

Öncelikle python un BeautifulSoup ve Request kütüphanelerini import ediyoruz.

from bs4 import BeautifulSoup
import requests

Daha sonra işlem yapacağımız web sitesine requests aracılığıyla bir istek gönderiyoruz. Bu istek GET yada POST methodlarından birisi olabilir. Bu isteği bir değişkene atama yaparak kullanıyoruz ki bu değişken üzerinden işlemlerimizi yapacağız.

Daha sonra işlem yapacağımız web sitesine requests aracılığıyla bir istek gönderiyoruz. Bu istek GET yada POST metotlarından birisi olabilir.

istek = requests.get(url)

istek sonucunu kontrol etmek için

istek.status_code

yazarak kontrol sağlarız. Eğer 200 dönmüşse sorun yok, diğer hatalar için örneğin 403 olarak dönmüşse sizi bot olarak algılamış olabilir sistem. Bunun çözümünü aşağıda anlatacağım.

daha sonra gönderdiğimiz isteği BeautifulSoup kütüphanesi aracılığıyla parçalayıp istediğimiz bölümlerini alalım.

Bazı siteler botları engellediği için tarayıcı bilgisini istek içerisinde göndermeniz gerekir.

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0'}

istek = requests.get(url,headers=headers)

veya daha tererruatlı

headers = headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
'Accept-Language' : 'tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding' : 'gzip, deflate',
'Content-Type' : 'application/ocsp-request'}

istek = requests.get(url,headers=headers)

burada amaç sisteme bot olmadığımızı göstermek. Genel de büyük sistemler alışveriş siteleri gibi siteler direk attığınız requests isteklerini bot olarak algılar ve status_code 403 hatası döner.

Yukarıda belirtilen şekilde istek gönderirseniz bot olarak algılanmaz.

Daha sonra bu isteği BeautifulSoup üzerine aktarıyorum ve asıl işleme geçiyoruz.

kaynak = BeautifulSoup(istek.content)

burada verileri kaynak değişkenine atıyorum ki kullanmada kolaylık sağlasın. istek.content  burada istek benim değişkenim adı content ise sayfa kaynağını görmemize yarıyor. tabi bunu BeautifulSoup içerisinde kullanıyoruz.

linkler = kaynak.find_all("a")

Sayfa içerisinde bulunan linkleri almak istediğim için, sayfa içerisinde yeri ve konumu fark etmeksizin bulunan tüm <a> taglarını find_all metot u ile arıyorum ve hafızaya alıyorum. Artık yapacağım işlemleri linkler değişkeni üzerinden yürüteceğim.

Önce sayfa içerisinde bulunan linklerin text değerlerini çekmek istiyorum.

for link in linkler:
    print(link.text)

bu işlem bana sayfada bulunan bütün <a> taglarının text ifadelerini verdi. 

<a href="www.fatihsahin.tc">Fatih Şahin Kişisel Not Defteri</a>

Yani örnek olarak bu a tag ında bulunan “Fatih Şahin Kişisel Not Defteri” text ifadesini verdi.

sadece a tag ında bulunan linkleri almak istersek

for link in linkler:
    print(link.get("href"))

yani a tag ı içerisinde bulunan href tıklanıldığında gidilecek olan site yada uzantıları verir.

 

ben önce text ifadeleri sonrada bu ifadelerin gidilmesi istenilen url leri çekmek için

for link in linkler:
    print(link.text,link.get("href"))

bu kodu kullanıyorum. link.text,link.get(“href”) ifadesini isterseniz link.text+”boşluk”+link.get(“href”) şeklinde yada boşluk yazan yere istediğiniz bir ifade yada karakter girerek te yapabilirsiniz.

Burada örnek olarak sadece a taglarını gösterdim fakat siz class yada id gibi seçici özelliği belirtilen html tagları arasında find_all komutu ile filtreleme yaparak aradığınız veriye ulaşabilirsiniz. Ben ilk defa kullandığım ve uygularken çok keyif aldığım BeautifulSoup kütüphanesi hakkımda kendime not bırakmak için bu yazıyı yazdım. Umarım işinize yarar. Google aramalarında görüşmek üzere.

 

 

 

 

Tarih:genelpython